diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..9bd0ac91d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,15 @@ +# 1.1.0 + +- Kotlin version 1.3.41 +- Ktor version 1.2.3-rc +- Added `enableABTest` as `Query` parameter +- Added `similarQuery` as `Query` parameter +- Added `advancedSyntaxFeatures` as `Query` parameter +- Added `index.exists()` method +- New `AlgoliaSearchClient` object exposes library version constant +- Added `Compression` feature. `Gzip` compression is enabled by default. +- Default `readTimeout` has been increased to 5 seconds +- It is now possible to configure `HttpClientConfig` in `Configuration` +- Added `ClientPlaces` to access Algolia Places endpoints. See this [file](docs/Places.md) for getting starting with Places. +- `QueryLanguage` is renamed to `Language` +- Fixed a bug in `browseAllABTests` methods \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..a3d9b261a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build.gradle.kts b/build.gradle.kts index f4dccdc2a..5cb382c51 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,11 @@ import com.jfrog.bintray.gradle.tasks.BintrayUploadTask +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.net.URI plugins { - id("kotlin-multiplatform") version "1.3.31" - id("kotlinx-serialization") version "1.3.31" + id("kotlin-multiplatform") version "1.3.41" + id("kotlinx-serialization") version "1.3.41" id("maven-publish") id("com.jfrog.bintray") version "1.8.4" id("com.github.kukuhyoniatmoko.buildconfigkotlin") version "1.0.5" @@ -156,4 +157,7 @@ tasks { setPublications("jvm", "metadata") } } + withType { + dependsOn("generateMetadataBuildConfigKotlin") + } } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Ktor.kt b/buildSrc/src/main/kotlin/Ktor.kt index 60862fafb..d8c882f5d 100644 --- a/buildSrc/src/main/kotlin/Ktor.kt +++ b/buildSrc/src/main/kotlin/Ktor.kt @@ -2,5 +2,5 @@ object Ktor : Dependency { override val group = "io.ktor" override val artifact = "ktor" - override val version = "1.2.1" + override val version = "1.2.3-rc" } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Library.kt b/buildSrc/src/main/kotlin/Library.kt index ecd44be89..3f85cc41a 100644 --- a/buildSrc/src/main/kotlin/Library.kt +++ b/buildSrc/src/main/kotlin/Library.kt @@ -2,5 +2,5 @@ object Library: Dependency { override val group = "com.algolia" override val artifact = "algoliasearch-client-kotlin" - override val version = "1.0.0" + override val version = "1.1.0" } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Serialization.kt b/buildSrc/src/main/kotlin/Serialization.kt index 65a14c9ff..b40996dea 100644 --- a/buildSrc/src/main/kotlin/Serialization.kt +++ b/buildSrc/src/main/kotlin/Serialization.kt @@ -1,6 +1,6 @@ object Serialization : Dependency { - override val version = "0.11.0" + override val version = "0.11.1" override val group = "org.jetbrains.kotlinx" override val artifact = "kotlinx-serialization" } \ No newline at end of file diff --git a/docs/Places.md b/docs/Places.md new file mode 100644 index 000000000..a811a5333 --- /dev/null +++ b/docs/Places.md @@ -0,0 +1,109 @@ +# Places client + +Algolia Places provides a fast, distributed and easy way to use address search. + +## Pricing + +#### Rate limit + +The Algolia Places API enforces 30 queries per second. [Contact us](https://community.algolia.com/places/contact.html) if you need more. + +If you're calling the API from your backend, the rate-limits computation is then based on the source IP. + +#### Plans + +- Free: 1000 requests / day [Sign Up](https://www.algolia.com/users/sign_up/places) +- Free, with authentication: 100 000 requests / month [Sign Up](https://www.algolia.com/users/sign_up/places) +- Paying: $0.40 per 1000 requests [Sign Up](https://www.algolia.com/users/sign_up/places) +- Up to unlimited: [Contact us](https://community.algolia.com/places/contact.html) + + +Visit our [website](https://community.algolia.com/places/pricing.html). + +## Usage + +#### Unauthenticated + +You can use Algolia Places without authentication. Limited to 1000 requests per day. + +```kotlin +val client = ClientPlaces() +``` + +#### Authenticated + +Pass an `ApplicationID` and an `APIKey` to the `ClientPlaces` for authenticated usage. + +```kotlin +val client = ClientPlaces( + ApplicationID("YourApplicationID"), + APIKey("YourPlacesAPIKey") +) +``` + +#### Search places for multiple languages + +By default, the response of `searchPlaces` contains translations in all languages. + +```kotlin +val response = client.searchPlaces(PlacesQuery("Paris")) + +response.hits.first().city.getValue(Language.English) +``` + +#### Search places for one language + +However, it is possible to restrict the search results to a single language. + +```kotlin +val response = client.searchPlaces( + query = PlacesQuery("New-York"), + language = Language.English +) + +response.hits.first().city +``` + +#### Search places in countries + +Unless one or multiple countries are specified, it will search on the whole planet. + +```kotlin +val query = placesQuery("York") { + countries { + +UnitedKingdom + +UnitedStates + } +} + +client.searchPlaces(query) +``` + +#### Search places around radius + +Use latitude and longitude coordinates to find places. + +```kotlin +val query = placesQuery { + aroundLatLng = Point(40.7128f, -74.0060f) // New-York +} + +client.searchPlaces(query) +``` + +#### Reverse geocoding + +Reverse geocoding means converting a location (latitude and longitude) to a readable address. + +```kotlin +client.reverseGeocoding(Point(40.7128f, -74.0060f)) // New-York +``` + +#### Get By ObjectID + +Use a Places `objectID` to get an Algolia Places record. + +```kotlin + clientPlaces.getByObjectID(ObjectID("201316654_7340078")) // New-York +``` + diff --git a/src/commonMain/kotlin/com/algolia/search/client/ClientAccount.kt b/src/commonMain/kotlin/com/algolia/search/client/ClientAccount.kt index 54dbeb629..6d31ec920 100644 --- a/src/commonMain/kotlin/com/algolia/search/client/ClientAccount.kt +++ b/src/commonMain/kotlin/com/algolia/search/client/ClientAccount.kt @@ -17,7 +17,7 @@ public object ClientAccount { * @throws IllegalStateException if [destination] index already exists. */ public suspend fun copyIndex(source: Index, destination: Index): List { - if (source.transport.applicationID == destination.transport.applicationID) { + if (source.transport.credentials.applicationID == destination.transport.credentials.applicationID) { throw IllegalArgumentException("Source and Destination indices should not be on the same application.") } var hasThrown404 = false diff --git a/src/commonMain/kotlin/com/algolia/search/client/ClientAnalytics.kt b/src/commonMain/kotlin/com/algolia/search/client/ClientAnalytics.kt index e37c830d1..d8ad4a7a5 100644 --- a/src/commonMain/kotlin/com/algolia/search/client/ClientAnalytics.kt +++ b/src/commonMain/kotlin/com/algolia/search/client/ClientAnalytics.kt @@ -1,5 +1,7 @@ package com.algolia.search.client +import com.algolia.search.configuration.Credentials +import com.algolia.search.configuration.CredentialsImpl import com.algolia.search.configuration.Configuration import com.algolia.search.configuration.ConfigurationAnalytics import com.algolia.search.endpoint.EndpointAnalytics @@ -16,20 +18,24 @@ import com.algolia.search.transport.Transport * Client to manage [ABTest] for analytics purposes. */ public class ClientAnalytics private constructor( - private val api: Transport -) : EndpointAnalytics by EndpointAnalyticsImpl(api), - Configuration by api { + private val transport: Transport +) : EndpointAnalytics by EndpointAnalyticsImpl(transport), + Configuration by transport, + Credentials by transport.credentials { public constructor( applicationID: ApplicationID, apiKey: APIKey ) : this( - Transport(ConfigurationAnalytics(applicationID, apiKey)) + Transport( + ConfigurationAnalytics(applicationID, apiKey), + CredentialsImpl(applicationID, apiKey) + ) ) public constructor( configuration: ConfigurationAnalytics - ) : this(Transport(configuration)) + ) : this(Transport(configuration, configuration)) /** * Browse every [ABTest] on the index and return them as a list. @@ -45,9 +51,10 @@ public class ClientAnalytics private constructor( var page = 0 while (true) { - val response = listABTests(page++, hitsPerPage, requestOptions) + val response = listABTests(page, hitsPerPage, requestOptions) - if (response.count == 0) break + if (response.count == response.total || response.count == 0) break + page += response.count responses += response } return responses diff --git a/src/commonMain/kotlin/com/algolia/search/client/ClientInsights.kt b/src/commonMain/kotlin/com/algolia/search/client/ClientInsights.kt index cd53d0c54..e61a52627 100644 --- a/src/commonMain/kotlin/com/algolia/search/client/ClientInsights.kt +++ b/src/commonMain/kotlin/com/algolia/search/client/ClientInsights.kt @@ -1,5 +1,7 @@ package com.algolia.search.client +import com.algolia.search.configuration.Credentials +import com.algolia.search.configuration.CredentialsImpl import com.algolia.search.configuration.Configuration import com.algolia.search.configuration.ConfigurationInsights import com.algolia.search.endpoint.EndpointInsights @@ -17,18 +19,19 @@ import com.algolia.search.transport.Transport * Client to manage [InsightsEvent]. */ public class ClientInsights private constructor( - private val api: Transport -) : EndpointInsights by EndpointInsightsImpl(api), - Configuration by api { + private val transport: Transport +) : EndpointInsights by EndpointInsightsImpl(transport), + Configuration by transport, + Credentials by transport.credentials { public constructor( applicationID: ApplicationID, apiKey: APIKey - ) : this(Transport(ConfigurationInsights(applicationID, apiKey))) + ) : this(Transport(ConfigurationInsights(applicationID, apiKey), CredentialsImpl(applicationID, apiKey))) public constructor( configuration: ConfigurationInsights - ) : this(Transport(configuration)) + ) : this(Transport(configuration, configuration)) public inner class User( val userToken: UserToken diff --git a/src/commonMain/kotlin/com/algolia/search/client/ClientPlaces.kt b/src/commonMain/kotlin/com/algolia/search/client/ClientPlaces.kt new file mode 100644 index 000000000..bae6f15f2 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/client/ClientPlaces.kt @@ -0,0 +1,30 @@ +package com.algolia.search.client + +import com.algolia.search.configuration.CredentialsImpl +import com.algolia.search.configuration.Configuration +import com.algolia.search.configuration.ConfigurationPlaces +import com.algolia.search.endpoint.EndpointPlaces +import com.algolia.search.endpoint.EndpointPlacesImpl +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID +import com.algolia.search.transport.Transport + + +public class ClientPlaces private constructor( + private val tranport: Transport +) : EndpointPlaces by EndpointPlacesImpl(tranport), + Configuration by tranport { + + public constructor( + applicationID: ApplicationID, + apiKey: APIKey + ) : this( + Transport(ConfigurationPlaces(), CredentialsImpl(applicationID, apiKey)) + ) + + public constructor( + configuration: ConfigurationPlaces + ) : this(Transport(configuration, null)) + + public constructor() : this(Transport(ConfigurationPlaces(), null)) +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/client/ClientSearch.kt b/src/commonMain/kotlin/com/algolia/search/client/ClientSearch.kt index bc416e3b1..c8d00b042 100644 --- a/src/commonMain/kotlin/com/algolia/search/client/ClientSearch.kt +++ b/src/commonMain/kotlin/com/algolia/search/client/ClientSearch.kt @@ -1,9 +1,6 @@ package com.algolia.search.client -import com.algolia.search.configuration.CallType -import com.algolia.search.configuration.Configuration -import com.algolia.search.configuration.ConfigurationSearch -import com.algolia.search.configuration.defaultLogLevel +import com.algolia.search.configuration.* import com.algolia.search.dsl.requestOptionsBuilder import com.algolia.search.endpoint.* import com.algolia.search.helper.encodeBase64 @@ -38,23 +35,29 @@ import kotlinx.coroutines.* * Client to perform operations on indices. */ public class ClientSearch private constructor( - private val transport: Transport + internal val transport: Transport ) : EndpointMultipleIndex by EndpointMultipleIndexImpl(transport), EndpointAPIKey by EndpointAPIKeyImpl(transport), EndpointMultiCluster by EndpointMulticlusterImpl(transport), EndpointPersonalization by EndpointPersonalizationImpl(transport), - Configuration by transport { + Configuration by transport, + Credentials by transport.credentials { public constructor( applicationID: ApplicationID, apiKey: APIKey, logLevel: LogLevel = defaultLogLevel - ) : this(Transport(ConfigurationSearch(applicationID, apiKey, logLevel = logLevel))) + ) : this( + Transport( + ConfigurationSearch(applicationID, apiKey, logLevel = logLevel), + CredentialsImpl(applicationID, apiKey) + ) + ) public constructor( configuration: ConfigurationSearch - ) : this(Transport(configuration)) + ) : this(Transport(configuration, configuration)) /** * Initialize an [Index] configured with [ConfigurationSearch]. diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/AlgoliaSearchClient.kt b/src/commonMain/kotlin/com/algolia/search/configuration/AlgoliaSearchClient.kt new file mode 100644 index 000000000..527fe47e4 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/AlgoliaSearchClient.kt @@ -0,0 +1,13 @@ +package com.algolia.search.configuration + + +/** + * Singleton exposing information on the library. + */ +public object AlgoliaSearchClient { + + /** + * Current version of the library. + */ + const val version = BuildConfig.version +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/Compression.kt b/src/commonMain/kotlin/com/algolia/search/configuration/Compression.kt new file mode 100644 index 000000000..bb8fc4a4b --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/Compression.kt @@ -0,0 +1,10 @@ +package com.algolia.search.configuration + + +/** + * The different methods of request payload compression. + */ +public enum class Compression { + None, + Gzip +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/Configuration.kt b/src/commonMain/kotlin/com/algolia/search/configuration/Configuration.kt index 38636ecc8..9517bba8c 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/Configuration.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/Configuration.kt @@ -1,9 +1,8 @@ package com.algolia.search.configuration -import com.algolia.search.model.APIKey -import com.algolia.search.model.ApplicationID import com.algolia.search.transport.RequestOptions import io.ktor.client.HttpClient +import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.logging.LogLevel @@ -13,16 +12,6 @@ import io.ktor.client.features.logging.LogLevel */ public interface Configuration { - /** - * [ApplicationID] to target. Is passed as a HTTP header. - */ - val applicationID: ApplicationID - /** - * [APIKey] for a given [ApplicationID]. Is passed as a HTTP header. - * To maintain security, never use your Admin [APIKey] on your front end or share it with anyone. - * In your front end, use the Search-only [APIKey] or any other key that has search-only rights. - */ - val apiKey: APIKey /** * The timeout for each request when performing write operations (POST, PUT ..). */ @@ -40,7 +29,11 @@ public interface Configuration { */ val hosts: List /** - * An optional [HttpClientEngine] used by Ktor that can be configured. + * An optional [HttpClientConfig<*>] used by Ktor for advanced HttpClient httpClientConfig. + */ + val httpClientConfig: ((HttpClientConfig<*>) -> Unit)? + /** + * An optional [HttpClientEngine] to specify which HttpEngine should be used by Ktor. */ val engine: HttpClientEngine? /** @@ -51,6 +44,10 @@ public interface Configuration { * Default headers that should be applied to every request. */ val defaultHeaders: Map? + /** + * The type of [Compression] to use for POST or PUT requests. + */ + val compression: Compression /** * @return The timeout that should be applied depending on the [CallType] and if a custom value has been diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationAnalytics.kt b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationAnalytics.kt index 8c302dad9..fb2c96da1 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationAnalytics.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationAnalytics.kt @@ -3,7 +3,8 @@ package com.algolia.search.configuration import com.algolia.search.client.ClientAnalytics import com.algolia.search.model.APIKey import com.algolia.search.model.ApplicationID -import com.algolia.search.transport.analyticsHost +import com.algolia.search.transport.analyticsHosts +import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.logging.LogLevel @@ -17,10 +18,12 @@ public data class ConfigurationAnalytics( override val writeTimeout: Long = defaultWriteTimeout, override val readTimeout: Long = defaultReadTimeout, override val logLevel: LogLevel = defaultLogLevel, - override val hosts: List = listOf(analyticsHost), + override val hosts: List = analyticsHosts, override val defaultHeaders: Map? = null, - override val engine: HttpClientEngine? = null -) : Configuration { + override val engine: HttpClientEngine? = null, + override val httpClientConfig: (HttpClientConfig<*>.() -> Unit)? = null +) : Configuration, Credentials { + override val compression: Compression = Compression.None override val httpClient = getHttpClient() } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationInsights.kt b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationInsights.kt index 6731ab356..c54814c4c 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationInsights.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationInsights.kt @@ -3,7 +3,8 @@ package com.algolia.search.configuration import com.algolia.search.client.ClientInsights import com.algolia.search.model.APIKey import com.algolia.search.model.ApplicationID -import com.algolia.search.transport.insightHost +import com.algolia.search.transport.insightHosts +import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.logging.LogLevel @@ -17,10 +18,12 @@ public data class ConfigurationInsights( override val writeTimeout: Long = defaultWriteTimeout, override val readTimeout: Long = defaultReadTimeout, override val logLevel: LogLevel = defaultLogLevel, - override val hosts: List = listOf(insightHost), + override val hosts: List = insightHosts, override val defaultHeaders: Map? = null, - override val engine: HttpClientEngine? = null -) : Configuration { + override val engine: HttpClientEngine? = null, + override val httpClientConfig: (HttpClientConfig<*>.() -> Unit)? = null +) : Configuration, Credentials { + override val compression: Compression = Compression.None override val httpClient = getHttpClient() } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationPlaces.kt b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationPlaces.kt new file mode 100644 index 000000000..16152df9d --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationPlaces.kt @@ -0,0 +1,25 @@ +package com.algolia.search.configuration + +import com.algolia.search.client.ClientPlaces +import com.algolia.search.transport.placesHosts +import io.ktor.client.HttpClientConfig +import io.ktor.client.engine.HttpClientEngine +import io.ktor.client.features.logging.LogLevel + + +/** + * Configuration used by [ClientPlaces]. + */ +public data class ConfigurationPlaces( + override val writeTimeout: Long = defaultWriteTimeout, + override val readTimeout: Long = defaultReadTimeout, + override val logLevel: LogLevel = defaultLogLevel, + override val hosts: List = placesHosts, + override val defaultHeaders: Map? = null, + override val engine: HttpClientEngine? = null, + override val httpClientConfig: (HttpClientConfig<*>.() -> Unit)? = null +) : Configuration { + + override val compression: Compression = Compression.None + override val httpClient = getHttpClient() +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationSearch.kt b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationSearch.kt index 463c08165..d3030e7c6 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationSearch.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/ConfigurationSearch.kt @@ -4,6 +4,7 @@ import com.algolia.search.client.ClientSearch import com.algolia.search.model.APIKey import com.algolia.search.model.ApplicationID import com.algolia.search.transport.searchHosts +import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.logging.LogLevel @@ -19,8 +20,10 @@ public data class ConfigurationSearch( override val logLevel: LogLevel = defaultLogLevel, override val hosts: List = applicationID.searchHosts, override val defaultHeaders: Map? = null, - override val engine: HttpClientEngine? = null -) : Configuration { + override val engine: HttpClientEngine? = null, + override val httpClientConfig: (HttpClientConfig<*>.() -> Unit)? = null, + override val compression: Compression = Compression.Gzip +) : Configuration, Credentials { override val httpClient = getHttpClient() } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/Credentials.kt b/src/commonMain/kotlin/com/algolia/search/configuration/Credentials.kt new file mode 100644 index 000000000..9b3a31809 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/Credentials.kt @@ -0,0 +1,22 @@ +package com.algolia.search.configuration + +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID + + +/** + * Configuration used by a client for authenticated request. + */ +public interface Credentials { + + /** + * [ApplicationID] to target. Is passed as a HTTP header. + */ + val applicationID: ApplicationID + /** + * [APIKey] for a given [ApplicationID]. Is passed as a HTTP header. + * To maintain security, never use your Admin [APIKey] on your front end or share it with anyone. + * In your front end, use the Search-only [APIKey] or any other key that has search-only rights. + */ + val apiKey: APIKey +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/CredentialsImpl.kt b/src/commonMain/kotlin/com/algolia/search/configuration/CredentialsImpl.kt new file mode 100644 index 000000000..9aa99d8cc --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/CredentialsImpl.kt @@ -0,0 +1,10 @@ +package com.algolia.search.configuration + +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID + + +internal data class CredentialsImpl( + override val applicationID: ApplicationID, + override val apiKey: APIKey +): Credentials \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/Extensions.kt b/src/commonMain/kotlin/com/algolia/search/configuration/Extensions.kt index 50419148b..ebf7fb502 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/Extensions.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/Extensions.kt @@ -4,5 +4,5 @@ import io.ktor.client.features.logging.LogLevel internal const val defaultWriteTimeout: Long = 30000L -internal const val defaultReadTimeout: Long = 2000L +internal const val defaultReadTimeout: Long = 5000L internal val defaultLogLevel = LogLevel.NONE \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/HttpClient.kt b/src/commonMain/kotlin/com/algolia/search/configuration/HttpClient.kt index 28bc4b45e..528ff09e1 100644 --- a/src/commonMain/kotlin/com/algolia/search/configuration/HttpClient.kt +++ b/src/commonMain/kotlin/com/algolia/search/configuration/HttpClient.kt @@ -1,52 +1,55 @@ package com.algolia.search.configuration -import BuildConfig -import com.algolia.search.model.response.ResponseABTest -import com.algolia.search.model.response.ResponseBatches -import com.algolia.search.model.response.creation.CreationAPIKey -import com.algolia.search.model.response.revision.RevisionIndex -import com.algolia.search.model.rule.Rule -import com.algolia.search.model.synonym.Synonym import com.algolia.search.serialize.JsonNonStrict import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig -import io.ktor.client.features.DefaultRequest import io.ktor.client.features.UserAgent +import io.ktor.client.features.defaultRequest import io.ktor.client.features.json.JsonFeature import io.ktor.client.features.json.serializer.KotlinxSerializer import io.ktor.client.features.logging.Logger import io.ktor.client.features.logging.Logging import io.ktor.client.features.logging.SIMPLE +import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.header +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpMethod import kotlinx.serialization.json.JsonObjectSerializer + internal fun Configuration.getHttpClient() = engine?.let { HttpClient(it) { configure(this@getHttpClient) } } ?: HttpClient { configure(this@getHttpClient) } internal fun HttpClientConfig<*>.configure(configuration: Configuration) { + configuration.httpClientConfig?.invoke(this) install(JsonFeature) { serializer = KotlinxSerializer(JsonNonStrict) - .also { - it.register(ResponseBatches) - it.register(Synonym) - it.register(JsonObjectSerializer) - it.register(Rule.serializer()) - it.register(CreationAPIKey.serializer()) - it.register(RevisionIndex.serializer()) - it.register(ResponseABTest) - } } install(Logging) { level = configuration.logLevel logger = Logger.SIMPLE } install(UserAgent) { - this.agent = "Algolia for Kotlin (${BuildConfig.version})" + agent = clientUserAgent(AlgoliaSearchClient.version) } - configuration.defaultHeaders?.let { - install(DefaultRequest) { + defaultRequest { + configuration.defaultHeaders?.let { it.forEach { (key, value) -> header(key, value) } } + if (method.canCompress()) { + compressionHeader(configuration.compression) + } + } +} + +internal fun HttpMethod.canCompress(): Boolean { + return this == HttpMethod.Post || this == HttpMethod.Put +} + +internal fun HttpRequestBuilder.compressionHeader(compression: Compression) { + when (compression) { + Compression.Gzip -> header(HttpHeaders.ContentEncoding, "gzip") + else -> Unit } } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/configuration/UserAgent.kt b/src/commonMain/kotlin/com/algolia/search/configuration/UserAgent.kt new file mode 100644 index 000000000..092116d57 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/configuration/UserAgent.kt @@ -0,0 +1,4 @@ +package com.algolia.search.configuration + + +public fun clientUserAgent(version: String) = "Algolia for Kotlin ($version)" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/DSLPlacesQuery.kt b/src/commonMain/kotlin/com/algolia/search/dsl/DSLPlacesQuery.kt new file mode 100644 index 000000000..23ac5e46b --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/dsl/DSLPlacesQuery.kt @@ -0,0 +1,19 @@ +package com.algolia.search.dsl + +import com.algolia.search.dsl.places.DSLCountries +import com.algolia.search.model.places.PlacesQuery + + +/** + * Create a [PlacesQuery] with [block] and an optional [query]. + */ +public fun placesQuery(query: String? = null, block: PlacesQuery.() -> Unit): PlacesQuery { + return PlacesQuery(query = query).apply(block) +} + +/** + * Assign the output of [block] to [PlacesQuery.countries]. + */ +public fun PlacesQuery.countries(block: DSLCountries.() -> Unit) { + countries = DSLCountries(block) +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/DSLQuery.kt b/src/commonMain/kotlin/com/algolia/search/dsl/DSLQuery.kt index a75441eab..3c3f8c94e 100644 --- a/src/commonMain/kotlin/com/algolia/search/dsl/DSLQuery.kt +++ b/src/commonMain/kotlin/com/algolia/search/dsl/DSLQuery.kt @@ -11,7 +11,7 @@ import com.algolia.search.dsl.filtering.DSLTagFilters import com.algolia.search.dsl.geosearch.DSLBoundingBox import com.algolia.search.dsl.geosearch.DSLPolygon import com.algolia.search.dsl.highlighting.DSLSnippet -import com.algolia.search.dsl.languages.DSLQueryLanguage +import com.algolia.search.dsl.languages.DSLLanguage import com.algolia.search.dsl.strategy.DSLAdvancedSyntaxFeatures import com.algolia.search.dsl.strategy.DSLAlternativesAsExact import com.algolia.search.model.filter.FilterGroupsConverter @@ -119,8 +119,8 @@ public fun Query.insidePolygon(block: DSLPolygon.() -> Unit) { /** * Assign the output of [block] to [Query.queryLanguages]. */ -public fun Query.queryLanguages(block: DSLQueryLanguage.() -> Unit) { - queryLanguages = DSLQueryLanguage(block) +public fun Query.queryLanguages(block: DSLLanguage.() -> Unit) { + queryLanguages = DSLLanguage(block) } /** diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/DSLSettings.kt b/src/commonMain/kotlin/com/algolia/search/dsl/DSLSettings.kt index bfc18c285..b300630b4 100644 --- a/src/commonMain/kotlin/com/algolia/search/dsl/DSLSettings.kt +++ b/src/commonMain/kotlin/com/algolia/search/dsl/DSLSettings.kt @@ -7,7 +7,7 @@ import com.algolia.search.dsl.attributes.DSLAttributesToRetrieve import com.algolia.search.dsl.attributes.DSLSearchableAttributes import com.algolia.search.dsl.highlighting.DSLSnippet import com.algolia.search.dsl.languages.DSLDecompoundedAttributes -import com.algolia.search.dsl.languages.DSLQueryLanguage +import com.algolia.search.dsl.languages.DSLLanguage import com.algolia.search.dsl.performance.DSLNumericAttributeFilter import com.algolia.search.dsl.ranking.DSLCustomRanking import com.algolia.search.dsl.ranking.DSLIndexName @@ -112,8 +112,8 @@ public fun Settings.disableTypoToleranceOnWords(block: DSLStrings.() -> Unit) { /** * Assign the output of [block] to [Settings.queryLanguages]. */ -public fun Settings.queryLanguages(block: DSLQueryLanguage.() -> Unit) { - queryLanguages = DSLQueryLanguage(block) +public fun Settings.queryLanguages(block: DSLLanguage.() -> Unit) { + queryLanguages = DSLLanguage(block) } /** diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLDecompoundedAttributes.kt b/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLDecompoundedAttributes.kt index 0c91a282d..927e4f11b 100644 --- a/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLDecompoundedAttributes.kt +++ b/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLDecompoundedAttributes.kt @@ -3,7 +3,7 @@ package com.algolia.search.dsl.languages import com.algolia.search.dsl.DSL import com.algolia.search.dsl.DSLParameters import com.algolia.search.dsl.attributes.DSLAttributes -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import com.algolia.search.model.settings.DecompoundedAttributes @@ -15,29 +15,29 @@ public class DSLDecompoundedAttributes( private val decompoundedAttributes: MutableList = mutableListOf() ) { - private infix fun QueryLanguage.decompounded(block: DSLAttributes.() -> Unit): DecompoundedAttributes { + private infix fun Language.decompounded(block: DSLAttributes.() -> Unit): DecompoundedAttributes { return DecompoundedAttributes(this, DSLAttributes(block)) } /** - * Create and add a [DecompoundedAttributes] for the [QueryLanguage.German] using [block] to [decompoundedAttributes]. + * Create and add a [DecompoundedAttributes] for the [Language.German] using [block] to [decompoundedAttributes]. */ public infix fun german(block: DSLAttributes.() -> Unit) { - +QueryLanguage.German.decompounded(block) + +Language.German.decompounded(block) } /** - * Create and add a [DecompoundedAttributes] for the [QueryLanguage.Finnish] using [block] to [decompoundedAttributes]. + * Create and add a [DecompoundedAttributes] for the [Language.Finnish] using [block] to [decompoundedAttributes]. */ public infix fun finnish(block: DSLAttributes.() -> Unit) { - +QueryLanguage.Finnish.decompounded(block) + +Language.Finnish.decompounded(block) } /** - * Create and add a [DecompoundedAttributes] for the [QueryLanguage.Dutch] using [block] to [decompoundedAttributes]. + * Create and add a [DecompoundedAttributes] for the [Language.Dutch] using [block] to [decompoundedAttributes]. */ public infix fun dutch(block: DSLAttributes.() -> Unit) { - +QueryLanguage.Dutch.decompounded(block) + +Language.Dutch.decompounded(block) } /** diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLLanguage.kt b/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLLanguage.kt new file mode 100644 index 000000000..d8bb4e846 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLLanguage.kt @@ -0,0 +1,87 @@ +package com.algolia.search.dsl.languages + +import com.algolia.search.dsl.DSL +import com.algolia.search.dsl.DSLParameters +import com.algolia.search.model.search.Language + + +/** + * DSL for building a [List] of [Language]. + */ +@Suppress("PropertyName") +@DSLParameters +public class DSLLanguage( + private val languages: MutableList = mutableListOf() +) { + + public val Afrikaans = Language.Afrikaans + public val Arabic = Language.Arabic + public val Azeri = Language.Azeri + public val Bulgarian = Language.Bulgarian + public val Brunei = Language.Brunei + public val Catalan = Language.Catalan + public val Czech = Language.Czech + public val Welsh = Language.Welsh + public val Danish = Language.Danish + public val German = Language.German + public val English = Language.English + public val Esperanto = Language.Esperanto + public val Spanish = Language.Spanish + public val Estonian = Language.Estonian + public val Basque = Language.Basque + public val Finnish = Language.Finnish + public val Faroese = Language.Faroese + public val French = Language.French + public val Galician = Language.Galician + public val Hebrew = Language.Hebrew + public val Hindi = Language.Hindi + public val Hungarian = Language.Hungarian + public val Armenian = Language.Armenian + public val Indonesian = Language.Indonesian + public val Icelandic = Language.Icelandic + public val Italian = Language.Italian + public val Japanese = Language.Japanese + public val Georgian = Language.Georgian + public val Kazakh = Language.Kazakh + public val Korean = Language.Korean + public val Kyrgyz = Language.Kyrgyz + public val Lithuanian = Language.Lithuanian + public val Maori = Language.Maori + public val Mongolian = Language.Mongolian + public val Marathi = Language.Marathi + public val Malay = Language.Malay + public val Maltese = Language.Maltese + public val Norwegian = Language.Norwegian + public val Dutch = Language.Dutch + public val NorthernSotho = Language.NorthernSotho + public val Polish = Language.Polish + public val Pashto = Language.Pashto + public val Portuguese = Language.Portuguese + public val Quechua = Language.Quechua + public val Romanian = Language.Romanian + public val Russian = Language.Russian + public val Slovak = Language.Slovak + public val Albanian = Language.Albanian + public val Swedish = Language.Swedish + public val Swahili = Language.Swahili + public val Tamil = Language.Tamil + public val Telugu = Language.Telugu + public val Tagalog = Language.Tagalog + public val Tswana = Language.Tswana + public val Turkish = Language.Turkish + public val Tatar = Language.Tatar + + /** + * Add [this] to [languages]. + */ + public operator fun Language.unaryPlus() { + languages += this + } + + public companion object : DSL> { + + override operator fun invoke(block: DSLLanguage.() -> Unit): List { + return DSLLanguage().apply(block).languages + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLQueryLanguage.kt b/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLQueryLanguage.kt deleted file mode 100644 index 1680507ae..000000000 --- a/src/commonMain/kotlin/com/algolia/search/dsl/languages/DSLQueryLanguage.kt +++ /dev/null @@ -1,87 +0,0 @@ -package com.algolia.search.dsl.languages - -import com.algolia.search.dsl.DSL -import com.algolia.search.dsl.DSLParameters -import com.algolia.search.model.search.QueryLanguage - - -/** - * DSL for building a [List] of [QueryLanguage]. - */ -@Suppress("PropertyName") -@DSLParameters -public class DSLQueryLanguage( - private val queryLanguages: MutableList = mutableListOf() -) { - - public val Afrikaans = QueryLanguage.Afrikaans - public val Arabic = QueryLanguage.Arabic - public val Azeri = QueryLanguage.Azeri - public val Bulgarian = QueryLanguage.Bulgarian - public val Brunei = QueryLanguage.Brunei - public val Catalan = QueryLanguage.Catalan - public val Czech = QueryLanguage.Czech - public val Welsh = QueryLanguage.Welsh - public val Danish = QueryLanguage.Danish - public val German = QueryLanguage.German - public val English = QueryLanguage.English - public val Esperanto = QueryLanguage.Esperanto - public val Spanish = QueryLanguage.Spanish - public val Estonian = QueryLanguage.Estonian - public val Basque = QueryLanguage.Basque - public val Finnish = QueryLanguage.Finnish - public val Faroese = QueryLanguage.Faroese - public val French = QueryLanguage.French - public val Galician = QueryLanguage.Galician - public val Hebrew = QueryLanguage.Hebrew - public val Hindi = QueryLanguage.Hindi - public val Hungarian = QueryLanguage.Hungarian - public val Armenian = QueryLanguage.Armenian - public val Indonesian = QueryLanguage.Indonesian - public val Icelandic = QueryLanguage.Icelandic - public val Italian = QueryLanguage.Italian - public val Japanese = QueryLanguage.Japanese - public val Georgian = QueryLanguage.Georgian - public val Kazakh = QueryLanguage.Kazakh - public val Korean = QueryLanguage.Korean - public val Kyrgyz = QueryLanguage.Kyrgyz - public val Lithuanian = QueryLanguage.Lithuanian - public val Maori = QueryLanguage.Maori - public val Mongolian = QueryLanguage.Mongolian - public val Marathi = QueryLanguage.Marathi - public val Malay = QueryLanguage.Malay - public val Maltese = QueryLanguage.Maltese - public val Norwegian = QueryLanguage.Norwegian - public val Dutch = QueryLanguage.Dutch - public val NorthernSotho = QueryLanguage.NorthernSotho - public val Polish = QueryLanguage.Polish - public val Pashto = QueryLanguage.Pashto - public val Portuguese = QueryLanguage.Portuguese - public val Quechua = QueryLanguage.Quechua - public val Romanian = QueryLanguage.Romanian - public val Russian = QueryLanguage.Russian - public val Slovak = QueryLanguage.Slovak - public val Albanian = QueryLanguage.Albanian - public val Swedish = QueryLanguage.Swedish - public val Swahili = QueryLanguage.Swahili - public val Tamil = QueryLanguage.Tamil - public val Telugu = QueryLanguage.Telugu - public val Tagalog = QueryLanguage.Tagalog - public val Tswana = QueryLanguage.Tswana - public val Turkish = QueryLanguage.Turkish - public val Tatar = QueryLanguage.Tatar - - /** - * Add [this] to [queryLanguages]. - */ - public operator fun QueryLanguage.unaryPlus() { - queryLanguages += this - } - - public companion object : DSL> { - - override operator fun invoke(block: DSLQueryLanguage.() -> Unit): List { - return DSLQueryLanguage().apply(block).queryLanguages - } - } -} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/dsl/places/DSLCountries.kt b/src/commonMain/kotlin/com/algolia/search/dsl/places/DSLCountries.kt new file mode 100644 index 000000000..7ea3007b3 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/dsl/places/DSLCountries.kt @@ -0,0 +1,280 @@ +package com.algolia.search.dsl.places + +import com.algolia.search.dsl.DSL +import com.algolia.search.dsl.DSLParameters +import com.algolia.search.model.places.Country + + +/** + * DSL for building a [List] of [Country]. + */ +@Suppress("PropertyName") +@DSLParameters +public class DSLCountries( + private val countries: MutableList = mutableListOf() +) { + + public val Afghanistan = Country.Afghanistan + public val AlandIslands = Country.AlandIslands + public val Albania = Country.Albania + public val Algeria = Country.Algeria + public val AmericanSamoa = Country.AmericanSamoa + public val Andorra = Country.Andorra + public val Angola = Country.Angola + public val Anguilla = Country.Anguilla + public val Antarctica = Country.Antarctica + public val AntiguaAndBarbuda = Country.AntiguaAndBarbuda + public val Argentina = Country.Argentina + public val Armenia = Country.Armenia + public val Aruba = Country.Aruba + public val Australia = Country.Australia + public val Austria = Country.Austria + public val Azerbaijan = Country.Azerbaijan + public val Bahamas = Country.Bahamas + public val Bahrain = Country.Bahrain + public val Bangladesh = Country.Bangladesh + public val Barbados = Country.Barbados + public val Belarus = Country.Belarus + public val Belgium = Country.Belgium + public val Belize = Country.Belize + public val Benin = Country.Benin + public val Bermuda = Country.Bermuda + public val Bhutan = Country.Bhutan + public val Bolivia = Country.Bolivia + public val CaribbeanNetherlands = Country.CaribbeanNetherlands + public val BosniaAndHerzegovina = Country.BosniaAndHerzegovina + public val Botswana = Country.Botswana + public val BouvetIsland = Country.BouvetIsland + public val Brazil = Country.Brazil + public val BritishIndianOceanTerritory = Country.BritishIndianOceanTerritory + public val BruneiDarussalam = Country.BruneiDarussalam + public val Bulgaria = Country.Bulgaria + public val BurkinaFaso = Country.BurkinaFaso + public val Burundi = Country.Burundi + public val CaboVerde = Country.CaboVerde + public val Cambodia = Country.Cambodia + public val Cameroon = Country.Cameroon + public val Canada = Country.Canada + public val CaymanIslands = Country.CaymanIslands + public val CentralAfricanRepublic = Country.CentralAfricanRepublic + public val Chad = Country.Chad + public val Chile = Country.Chile + public val China = Country.China + public val ChristmasIsland = Country.ChristmasIsland + public val CocosIslands = Country.CocosIslands + public val Colombia = Country.Colombia + public val Comoros = Country.Comoros + public val RepublicOfTheCongo = Country.RepublicOfTheCongo + public val DemocraticRepublicOfTheCongo = Country.DemocraticRepublicOfTheCongo + public val CookIslands = Country.CookIslands + public val CostaRica = Country.CostaRica + public val IvoryCoast = Country.IvoryCoast + public val Croatia = Country.Croatia + public val Cuba = Country.Cuba + public val Curacao = Country.Curacao + public val Cyprus = Country.Cyprus + public val CzechRepublic = Country.CzechRepublic + public val Denmark = Country.Denmark + public val Djibouti = Country.Djibouti + public val Dominica = Country.Dominica + public val DominicanRepublic = Country.DominicanRepublic + public val Ecuador = Country.Ecuador + public val Egypt = Country.Egypt + public val ElSalvador = Country.ElSalvador + public val EquatorialGuinea = Country.EquatorialGuinea + public val Eritrea = Country.Eritrea + public val Estonia = Country.Estonia + public val Eswatini = Country.Eswatini + public val Ethiopia = Country.Ethiopia + public val FalklandIslands = Country.FalklandIslands + public val FaroeIslands = Country.FaroeIslands + public val Fiji = Country.Fiji + public val Finland = Country.Finland + public val France = Country.France + public val FrenchGuiana = Country.FrenchGuiana + public val FrenchPolynesia = Country.FrenchPolynesia + public val FrenchSouthernAndAntarcticLands = Country.FrenchSouthernAndAntarcticLands + public val Gabon = Country.Gabon + public val Gambia = Country.Gambia + public val Georgia = Country.Georgia + public val Germany = Country.Germany + public val Ghana = Country.Ghana + public val Gibraltar = Country.Gibraltar + public val Greece = Country.Greece + public val Greenland = Country.Greenland + public val Grenada = Country.Grenada + public val Guadeloupe = Country.Guadeloupe + public val Guam = Country.Guam + public val Guatemala = Country.Guatemala + public val BailiwickOfGuernsey = Country.BailiwickOfGuernsey + public val Guinea = Country.Guinea + public val GuineaBissau = Country.GuineaBissau + public val Guyana = Country.Guyana + public val Haiti = Country.Haiti + public val HeardIslandAndMcDonaldIslands = Country.HeardIslandAndMcDonaldIslands + public val VaticanCity = Country.VaticanCity + public val Honduras = Country.Honduras + public val HongKong = Country.HongKong + public val Hungary = Country.Hungary + public val Iceland = Country.Iceland + public val India = Country.India + public val Indonesia = Country.Indonesia + public val Iran = Country.Iran + public val Iraq = Country.Iraq + public val Ireland = Country.Ireland + public val IsleOfMan = Country.IsleOfMan + public val Israel = Country.Israel + public val Italy = Country.Italy + public val Jamaica = Country.Jamaica + public val Japan = Country.Japan + public val Jersey = Country.Jersey + public val Jordan = Country.Jordan + public val Kazakhstan = Country.Kazakhstan + public val Kenya = Country.Kenya + public val Kiribati = Country.Kiribati + public val NorthKorea = Country.NorthKorea + public val SouthKorea = Country.SouthKorea + public val Kuwait = Country.Kuwait + public val Kyrgyzstan = Country.Kyrgyzstan + public val Laos = Country.Laos + public val Latvia = Country.Latvia + public val Lebanon = Country.Lebanon + public val Lesotho = Country.Lesotho + public val Liberia = Country.Liberia + public val Libya = Country.Libya + public val Liechtenstein = Country.Liechtenstein + public val Lithuania = Country.Lithuania + public val Luxembourg = Country.Luxembourg + public val Macau = Country.Macau + public val Madagascar = Country.Madagascar + public val Malawi = Country.Malawi + public val Malaysia = Country.Malaysia + public val Maldives = Country.Maldives + public val Mali = Country.Mali + public val Malta = Country.Malta + public val MarshallIslands = Country.MarshallIslands + public val Martinique = Country.Martinique + public val Mauritania = Country.Mauritania + public val Mauritius = Country.Mauritius + public val Mayotte = Country.Mayotte + public val Mexico = Country.Mexico + public val Micronesia = Country.Micronesia + public val Moldova = Country.Moldova + public val Monaco = Country.Monaco + public val Mongolia = Country.Mongolia + public val Montenegro = Country.Montenegro + public val Montserrat = Country.Montserrat + public val Morocco = Country.Morocco + public val Mozambique = Country.Mozambique + public val Myanmar = Country.Myanmar + public val Namibia = Country.Namibia + public val Nauru = Country.Nauru + public val Nepal = Country.Nepal + public val Netherlands = Country.Netherlands + public val NewCaledonia = Country.NewCaledonia + public val NewZealand = Country.NewZealand + public val Nicaragua = Country.Nicaragua + public val Niger = Country.Niger + public val Nigeria = Country.Nigeria + public val Niue = Country.Niue + public val NorfolkIsland = Country.NorfolkIsland + public val NorthMacedonia = Country.NorthMacedonia + public val NorthernMarianaIslands = Country.NorthernMarianaIslands + public val Norway = Country.Norway + public val Oman = Country.Oman + public val Pakistan = Country.Pakistan + public val Palau = Country.Palau + public val Palestine = Country.Palestine + public val Panama = Country.Panama + public val PapuaNewGuinea = Country.PapuaNewGuinea + public val Paraguay = Country.Paraguay + public val Peru = Country.Peru + public val Philippines = Country.Philippines + public val PitcairnIslands = Country.PitcairnIslands + public val Poland = Country.Poland + public val Portugal = Country.Portugal + public val PuertoRico = Country.PuertoRico + public val Qatar = Country.Qatar + public val Reunion = Country.Reunion + public val Romania = Country.Romania + public val Russia = Country.Russia + public val Rwanda = Country.Rwanda + public val SaintBarthelemy = Country.SaintBarthelemy + public val SaintHelena = Country.SaintHelena + public val SaintKittsAndNevis = Country.SaintKittsAndNevis + public val SaintLucia = Country.SaintLucia + public val SaintMartin = Country.SaintMartin + public val SaintPierreAndMiquelon = Country.SaintPierreAndMiquelon + public val SaintVincentAndTheGrenadines = Country.SaintVincentAndTheGrenadines + public val Samoa = Country.Samoa + public val SanMarino = Country.SanMarino + public val SaoTomeAndPrincipe = Country.SaoTomeAndPrincipe + public val SaudiArabia = Country.SaudiArabia + public val Senegal = Country.Senegal + public val Serbia = Country.Serbia + public val Seychelles = Country.Seychelles + public val SierraLeone = Country.SierraLeone + public val Singapore = Country.Singapore + public val SintMaarten = Country.SintMaarten + public val Slovakia = Country.Slovakia + public val Slovenia = Country.Slovenia + public val SolomonIslands = Country.SolomonIslands + public val Somalia = Country.Somalia + public val SouthAfrica = Country.SouthAfrica + public val SouthGeorgiaAndTheSouthSandwichIslands = Country.SouthGeorgiaAndTheSouthSandwichIslands + public val SouthSudan = Country.SouthSudan + public val Spain = Country.Spain + public val SriLanka = Country.SriLanka + public val Sudan = Country.Sudan + public val Suriname = Country.Suriname + public val SvalbardAndJanMayen = Country.SvalbardAndJanMayen + public val Sweden = Country.Sweden + public val Switzerland = Country.Switzerland + public val Syria = Country.Syria + public val Taiwan = Country.Taiwan + public val Tajikistan = Country.Tajikistan + public val Tanzania = Country.Tanzania + public val Thailand = Country.Thailand + public val TimorLeste = Country.TimorLeste + public val Togo = Country.Togo + public val Tokelau = Country.Tokelau + public val Tonga = Country.Tonga + public val TrinidadAndTobago = Country.TrinidadAndTobago + public val Tunisia = Country.Tunisia + public val Turkey = Country.Turkey + public val Turkmenistan = Country.Turkmenistan + public val TurksAndCaicosIslands = Country.TurksAndCaicosIslands + public val Tuvalu = Country.Tuvalu + public val Uganda = Country.Uganda + public val Ukraine = Country.Ukraine + public val UnitedArabEmirates = Country.UnitedArabEmirates + public val UnitedKingdom = Country.UnitedKingdom + public val UnitedStates = Country.UnitedStates + public val UnitedStatesMinorOutlyingIslands = Country.UnitedStatesMinorOutlyingIslands + public val Uruguay = Country.Uruguay + public val Uzbekistan = Country.Uzbekistan + public val Vanuatu = Country.Vanuatu + public val Venezuela = Country.Venezuela + public val Vietnam = Country.Vietnam + public val VirginIslandsGB = Country.VirginIslandsGB + public val VirginIslandsUS = Country.VirginIslandsUS + public val WallisAndFutuna = Country.WallisAndFutuna + public val WesternSahara = Country.WesternSahara + public val Yemen = Country.Yemen + public val Zambia = Country.Zambia + public val Zimbabwe = Country.Zimbabwe + + /** + * Add [this] to [countries]. + */ + public operator fun Country.unaryPlus() { + countries += this + } + + public companion object : DSL> { + + override operator fun invoke(block: DSLCountries.() -> Unit): List { + return DSLCountries().apply(block).countries + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointAnalyticsImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointAnalyticsImpl.kt index 02500bd3a..adc6ba70e 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointAnalyticsImpl.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointAnalyticsImpl.kt @@ -4,6 +4,7 @@ import com.algolia.search.configuration.CallType import com.algolia.search.dsl.requestOptionsBuilder import com.algolia.search.model.analytics.ABTest import com.algolia.search.model.analytics.ABTestID +import com.algolia.search.model.request.EmptyBody import com.algolia.search.model.response.ResponseABTest import com.algolia.search.model.response.ResponseABTests import com.algolia.search.model.response.creation.CreationABTest @@ -33,7 +34,13 @@ internal class EndpointAnalyticsImpl( } override suspend fun stopABTest(abTestID: ABTestID, requestOptions: RequestOptions?): RevisionABTest { - return transport.request(HttpMethod.Post, CallType.Write, "$RouteABTestsV2/$abTestID/stop", requestOptions, "") + return transport.request( + HttpMethod.Post, + CallType.Write, + "$RouteABTestsV2/$abTestID/stop", + requestOptions, + EmptyBody + ) } override suspend fun deleteABTest(abTestID: ABTestID, requestOptions: RequestOptions?): DeletionABTest { diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndex.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndex.kt index 37bd229a5..0bd7e5cbc 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndex.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndex.kt @@ -6,6 +6,7 @@ import com.algolia.search.model.index.Scope import com.algolia.search.model.response.deletion.DeletionIndex import com.algolia.search.model.response.revision.RevisionIndex import com.algolia.search.transport.RequestOptions +import com.algolia.search.model.settings.Settings /** @@ -119,4 +120,10 @@ public interface EndpointIndex { destination: IndexName, requestOptions: RequestOptions? = null ): RevisionIndex + + /** + * @return true if the index exists on the remote server. An index exists if at least one object has been saved, or + * if [Settings] have been saved. + */ + suspend fun exists(): Boolean } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexImpl.kt index 73501329a..430a7f461 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexImpl.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexImpl.kt @@ -6,12 +6,15 @@ import com.algolia.search.model.index.Scope import com.algolia.search.model.request.RequestCopyOrMove import com.algolia.search.model.response.deletion.DeletionIndex import com.algolia.search.model.response.revision.RevisionIndex +import com.algolia.search.model.search.Query import com.algolia.search.serialize.JsonNoDefaults import com.algolia.search.serialize.KeyCopy import com.algolia.search.serialize.KeyMove import com.algolia.search.transport.RequestOptions import com.algolia.search.transport.Transport +import io.ktor.client.features.ResponseException import io.ktor.http.HttpMethod +import io.ktor.http.HttpStatusCode internal class EndpointIndexImpl( @@ -58,4 +61,13 @@ internal class EndpointIndexImpl( override suspend fun copySynonyms(destination: IndexName, requestOptions: RequestOptions?): RevisionIndex { return copyIndex(destination, listOf(Scope.Synonyms), requestOptions) } + + override suspend fun exists(): Boolean { + try { + EndpointSearchImpl(transport, indexName).search(Query(responseFields = emptyList())) + } catch (exception: ResponseException) { + if (exception.response.status == HttpStatusCode.NotFound) return false + } + return true + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexingImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexingImpl.kt index a2fa3b4bb..046b3bfe4 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexingImpl.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointIndexingImpl.kt @@ -14,6 +14,7 @@ import com.algolia.search.model.indexing.DeleteByQuery import com.algolia.search.model.indexing.Indexable import com.algolia.search.model.indexing.Partial import com.algolia.search.model.multipleindex.RequestObjects +import com.algolia.search.model.request.EmptyBody import com.algolia.search.model.request.RequestParams import com.algolia.search.model.request.RequestRequestObjects import com.algolia.search.model.response.ResponseBatch @@ -195,7 +196,8 @@ internal class EndpointIndexingImpl( createIfNotExists: Boolean, requestOptions: RequestOptions? ): ResponseBatch { - val operations = partials.map { BatchOperation.PartialUpdateObject.from(it.first, it.second, createIfNotExists) } + val operations = + partials.map { BatchOperation.PartialUpdateObject.from(it.first, it.second, createIfNotExists) } return batch(operations, requestOptions) } @@ -212,7 +214,7 @@ internal class EndpointIndexingImpl( } override suspend fun clearObjects(requestOptions: RequestOptions?): RevisionIndex { - return transport.request(HttpMethod.Post, CallType.Write, indexName.toPath("/clear"), requestOptions, "") + return transport.request(HttpMethod.Post, CallType.Write, indexName.toPath("/clear"), requestOptions, EmptyBody) } override suspend fun replaceAllObjects( diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlaces.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlaces.kt new file mode 100644 index 000000000..09e8c5206 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlaces.kt @@ -0,0 +1,43 @@ +package com.algolia.search.endpoint + +import com.algolia.search.model.ObjectID +import com.algolia.search.model.places.PlaceLanguages +import com.algolia.search.model.places.PlacesQuery +import com.algolia.search.model.response.ResponseSearchPlacesMono +import com.algolia.search.model.response.ResponseSearchPlacesMulti +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.Language +import com.algolia.search.transport.RequestOptions + + +public interface EndpointPlaces { + + suspend fun searchPlaces( + query: PlacesQuery = PlacesQuery(), + requestOptions: RequestOptions? = null + ): ResponseSearchPlacesMulti + + suspend fun searchPlaces( + language: Language, + query: PlacesQuery = PlacesQuery(), + requestOptions: RequestOptions? = null + ): ResponseSearchPlacesMono + + suspend fun getByObjectID( + objectID: ObjectID, + requestOptions: RequestOptions? = null + ): PlaceLanguages + + suspend fun reverseGeocoding( + geolocation: Point, + hitsPerPage: Int? = null, + requestOptions: RequestOptions? = null + ): ResponseSearchPlacesMulti + + suspend fun reverseGeocoding( + language: Language, + geolocation: Point, + hitsPerPage: Int? = null, + requestOptions: RequestOptions? = null + ): ResponseSearchPlacesMono +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlacesImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlacesImpl.kt new file mode 100644 index 000000000..d9357556f --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointPlacesImpl.kt @@ -0,0 +1,73 @@ +package com.algolia.search.endpoint + +import com.algolia.search.configuration.CallType +import com.algolia.search.dsl.requestOptionsBuilder +import com.algolia.search.model.ObjectID +import com.algolia.search.model.places.PlaceLanguages +import com.algolia.search.model.places.PlacesQuery +import com.algolia.search.model.response.ResponseSearchPlacesMono +import com.algolia.search.model.response.ResponseSearchPlacesMulti +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.Language +import com.algolia.search.serialize.* +import com.algolia.search.transport.RequestOptions +import com.algolia.search.transport.Transport +import io.ktor.http.HttpMethod + + +internal class EndpointPlacesImpl( + private val transport: Transport +) : EndpointPlaces { + + override suspend fun searchPlaces( + query: PlacesQuery, + requestOptions: RequestOptions? + ): ResponseSearchPlacesMulti { + val body = JsonNoDefaults.stringify(PlacesQuery.serializer(), query) + + return transport.request(HttpMethod.Post, CallType.Read, "$RoutePlaces/query", requestOptions, body) + } + + override suspend fun searchPlaces( + language: Language, + query: PlacesQuery, + requestOptions: RequestOptions? + ): ResponseSearchPlacesMono { + val copy = query.copy().apply { this.language = language } + val body = JsonNoDefaults.stringify(PlacesQuery.serializer(), copy) + + return transport.request(HttpMethod.Post, CallType.Read, "$RoutePlaces/query", requestOptions, body) + } + + override suspend fun getByObjectID(objectID: ObjectID, requestOptions: RequestOptions?): PlaceLanguages { + return transport.request(HttpMethod.Get, CallType.Read, "$RoutePlaces/$objectID", requestOptions) + } + + override suspend fun reverseGeocoding( + geolocation: Point, + hitsPerPage: Int?, + requestOptions: RequestOptions? + ): ResponseSearchPlacesMulti { + val options = requestOptionsBuilder(requestOptions) { + parameter(KeyAroundLatLng, "${geolocation.latitude},${geolocation.longitude}") + parameter(KeyHitsPerPage, hitsPerPage) + } + + return transport.request(HttpMethod.Get, CallType.Read, "$RoutePlaces/reverse", options) + } + + override suspend fun reverseGeocoding( + language: Language, + geolocation: Point, + hitsPerPage: Int?, + requestOptions: RequestOptions? + ): ResponseSearchPlacesMono { + val options = requestOptionsBuilder(requestOptions) { + parameter(KeyAroundLatLng, "${geolocation.latitude},${geolocation.longitude}") + parameter(KeyHitsPerPage, hitsPerPage) + parameter(KeyLanguage, language.raw) + } + + return transport.request(HttpMethod.Get, CallType.Read, "$RoutePlaces/reverse", options) + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointRuleImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointRuleImpl.kt index 08aed7999..ff56ef207 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointRuleImpl.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointRuleImpl.kt @@ -5,6 +5,7 @@ import com.algolia.search.dsl.requestOptionsBuilder import com.algolia.search.exception.EmptyListException import com.algolia.search.model.IndexName import com.algolia.search.model.ObjectID +import com.algolia.search.model.request.EmptyBody import com.algolia.search.model.response.ResponseSearchRules import com.algolia.search.model.response.revision.RevisionIndex import com.algolia.search.model.rule.Rule @@ -71,7 +72,13 @@ internal class EndpointRuleImpl( parameter(KeyForwardToReplicas, forwardToReplicas) } - return transport.request(HttpMethod.Post, CallType.Write, indexName.toPath("/$RouteRules/clear"), options, "") + return transport.request( + HttpMethod.Post, + CallType.Write, + indexName.toPath("/$RouteRules/clear"), + options, + EmptyBody + ) } override suspend fun saveRules( diff --git a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointSynonymImpl.kt b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointSynonymImpl.kt index d78314262..8eefda953 100644 --- a/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointSynonymImpl.kt +++ b/src/commonMain/kotlin/com/algolia/search/endpoint/EndpointSynonymImpl.kt @@ -5,6 +5,7 @@ import com.algolia.search.dsl.requestOptionsBuilder import com.algolia.search.exception.EmptyListException import com.algolia.search.model.IndexName import com.algolia.search.model.ObjectID +import com.algolia.search.model.request.EmptyBody import com.algolia.search.model.response.ResponseSearchSynonyms import com.algolia.search.model.response.deletion.DeletionIndex import com.algolia.search.model.response.revision.RevisionIndex @@ -89,7 +90,7 @@ internal class EndpointSynonymImpl( parameter(KeyForwardToReplicas, forwardToReplicas) } - return transport.request(HttpMethod.Post, CallType.Write, path, options, "") + return transport.request(HttpMethod.Post, CallType.Write, path, options, EmptyBody) } override suspend fun replaceAllSynonyms( diff --git a/src/commonMain/kotlin/com/algolia/search/model/ClientDate.kt b/src/commonMain/kotlin/com/algolia/search/model/ClientDate.kt index 2b6c8c11d..c7ef2334c 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/ClientDate.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/ClientDate.kt @@ -8,7 +8,7 @@ import kotlinx.serialization.Serializable * Convert a [String] or [Long] date format into a platform specific Date object. */ @Serializable(KSerializerClientDate::class) -public expect class ClientDate(raw: String) : Raw { +public expect class ClientDate internal constructor(raw: String) : Raw { - constructor(timestamp: Long) + internal constructor(timestamp: Long) } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/indexing/DeleteByQuery.kt b/src/commonMain/kotlin/com/algolia/search/model/indexing/DeleteByQuery.kt index dd03020fc..7787eb7a2 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/indexing/DeleteByQuery.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/indexing/DeleteByQuery.kt @@ -1,5 +1,6 @@ package com.algolia.search.model.indexing +import com.algolia.search.dsl.DSLParameters import com.algolia.search.model.search.* import com.algolia.search.serialize.* import kotlinx.serialization.SerialName @@ -7,6 +8,7 @@ import kotlinx.serialization.Serializable @Serializable +@DSLParameters public data class DeleteByQuery( /** * Filter the query with numeric, facet and/or tag filters. diff --git a/src/commonMain/kotlin/com/algolia/search/model/insights/InsightsEvent.kt b/src/commonMain/kotlin/com/algolia/search/model/insights/InsightsEvent.kt index 8fc4acfc0..a49e20383 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/insights/InsightsEvent.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/insights/InsightsEvent.kt @@ -114,8 +114,8 @@ public sealed class InsightsEvent { obj.userToken?.let { KeyUserToken to it.raw } obj.queryID?.let { KeyQueryID to it.raw } this stringify obj.resources - when (obj) { - is Click -> obj.positions?.let { KeyPositions to jsonArray { it.forEach { +(it as Number) } } } + if (obj is Click) { + obj.positions?.let { KeyPositions to jsonArray { it.forEach { +(it as Number) } } } } } encoder.asJsonOutput().encodeJson(json) diff --git a/src/commonMain/kotlin/com/algolia/search/model/multipleindex/IndexQuery.kt b/src/commonMain/kotlin/com/algolia/search/model/multipleindex/IndexQuery.kt index a9ffd3a59..72f63e415 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/multipleindex/IndexQuery.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/multipleindex/IndexQuery.kt @@ -12,5 +12,5 @@ import kotlinx.serialization.Serializable @Serializable public data class IndexQuery( val indexName: IndexName, - val query: Query + val query: Query = Query() ) \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/Country.kt b/src/commonMain/kotlin/com/algolia/search/model/places/Country.kt new file mode 100644 index 000000000..4951d221c --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/Country.kt @@ -0,0 +1,536 @@ +package com.algolia.search.model.places + +import com.algolia.search.model.Raw +import com.algolia.search.serialize.* +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.internal.StringSerializer + + +/** + * List of countries with associated country code. + * You can pass two letters country codes (ISO 3166-1) using the [Other] class, but they need to be lower-cased. + */ +@Serializable(Country.Companion::class) +sealed class Country(override val raw: String) : Raw { + + public object Afghanistan : Country(KeyAfghanistan) + public object AlandIslands : Country(KeyAlandIslands) + public object Albania : Country(KeyAlbania) + public object Algeria : Country(KeyAlgeria) + public object AmericanSamoa : Country(KeyAmericanSamoa) + public object Andorra : Country(KeyAndorra) + public object Angola : Country(KeyAngola) + public object Anguilla : Country(KeyAnguilla) + public object Antarctica : Country(KeyAntarctica) + public object AntiguaAndBarbuda : Country(KeyAntiguaAndBarbuda) + public object Argentina : Country(KeyArgentina) + public object Armenia : Country(KeyArmenia) + public object Aruba : Country(KeyAruba) + public object Australia : Country(KeyAustralia) + public object Austria : Country(KeyAustria) + public object Azerbaijan : Country(KeyAzerbaijan) + public object Bahamas : Country(KeyBahamas) + public object Bahrain : Country(KeyBahrain) + public object Bangladesh : Country(KeyBangladesh) + public object Barbados : Country(KeyBarbados) + public object Belarus : Country(KeyBelarus) + public object Belgium : Country(KeyBelgium) + public object Belize : Country(KeyBelize) + public object Benin : Country(KeyBenin) + public object Bermuda : Country(KeyBermuda) + public object Bhutan : Country(KeyBhutan) + public object Bolivia : Country(KeyBolivia) + public object CaribbeanNetherlands : Country(KeyCaribbeanNetherlands) + public object BosniaAndHerzegovina : Country(KeyBosniaAndHerzegovina) + public object Botswana : Country(KeyBotswana) + public object BouvetIsland : Country(KeyBouvetIsland) + public object Brazil : Country(KeyBrazil) + public object BritishIndianOceanTerritory : Country(KeyBritishIndianOceanTerritory) + public object BruneiDarussalam : Country(KeyBruneiDarussalam) + public object Bulgaria : Country(KeyBulgaria) + public object BurkinaFaso : Country(KeyBurkinaFaso) + public object Burundi : Country(KeyBurundi) + public object CaboVerde : Country(KeyCaboVerde) + public object Cambodia : Country(KeyCambodia) + public object Cameroon : Country(KeyCameroon) + public object Canada : Country(KeyCanada) + public object CaymanIslands : Country(KeyCaymanIslands) + public object CentralAfricanRepublic : Country(KeyCentralAfricanRepublic) + public object Chad : Country(KeyChad) + public object Chile : Country(KeyChile) + public object China : Country(KeyChina) + public object ChristmasIsland : Country(KeyChristmasIsland) + public object CocosIslands : Country(KeyCocosIslands) + public object Colombia : Country(KeyColombia) + public object Comoros : Country(KeyComoros) + public object RepublicOfTheCongo : Country(KeyRepublicOfTheCongo) + public object DemocraticRepublicOfTheCongo : Country(KeyDemocraticRepublicOfTheCongo) + public object CookIslands : Country(KeyCookIslands) + public object CostaRica : Country(KeyCostaRica) + public object IvoryCoast : Country(KeyIvoryCoast) + public object Croatia : Country(KeyCroatia) + public object Cuba : Country(KeyCuba) + public object Curacao : Country(KeyCuracao) + public object Cyprus : Country(KeyCyprus) + public object CzechRepublic : Country(KeyCzechRepublic) + public object Denmark : Country(KeyDenmark) + public object Djibouti : Country(KeyDjibouti) + public object Dominica : Country(KeyDominica) + public object DominicanRepublic : Country(KeyDominicanRepublic) + public object Ecuador : Country(KeyEcuador) + public object Egypt : Country(KeyEgypt) + public object ElSalvador : Country(KeyElSalvador) + public object EquatorialGuinea : Country(KeyEquatorialGuinea) + public object Eritrea : Country(KeyEritrea) + public object Estonia : Country(KeyEstonia) + public object Eswatini : Country(KeyEswatini) + public object Ethiopia : Country(KeyEthiopia) + public object FalklandIslands : Country(KeyFalklandIslands) + public object FaroeIslands : Country(KeyFaroeIslands) + public object Fiji : Country(KeyFiji) + public object Finland : Country(KeyFinland) + public object France : Country(KeyFrance) + public object FrenchGuiana : Country(KeyFrenchGuiana) + public object FrenchPolynesia : Country(KeyFrenchPolynesia) + public object FrenchSouthernAndAntarcticLands : Country(KeyFrenchSouthernAndAntarcticLands) + public object Gabon : Country(KeyGabon) + public object Gambia : Country(KeyGambia) + public object Georgia : Country(KeyGeorgia) + public object Germany : Country(KeyGermany) + public object Ghana : Country(KeyGhana) + public object Gibraltar : Country(KeyGibraltar) + public object Greece : Country(KeyGreece) + public object Greenland : Country(KeyGreenland) + public object Grenada : Country(KeyGrenada) + public object Guadeloupe : Country(KeyGuadeloupe) + public object Guam : Country(KeyGuam) + public object Guatemala : Country(KeyGuatemala) + public object BailiwickOfGuernsey : Country(KeyBailiwickOfGuernsey) + public object Guinea : Country(KeyGuinea) + public object GuineaBissau : Country(KeyGuineaBissau) + public object Guyana : Country(KeyGuyana) + public object Haiti : Country(KeyHaiti) + public object HeardIslandAndMcDonaldIslands : Country(KeyHeardIslandAndMcDonaldIslands) + public object VaticanCity : Country(KeyVaticanCity) + public object Honduras : Country(KeyHonduras) + public object HongKong : Country(KeyHongKong) + public object Hungary : Country(KeyHungary) + public object Iceland : Country(KeyIceland) + public object India : Country(KeyIndia) + public object Indonesia : Country(KeyIndonesia) + public object Iran : Country(KeyIran) + public object Iraq : Country(KeyIraq) + public object Ireland : Country(KeyIreland) + public object IsleOfMan : Country(KeyIsleOfMan) + public object Israel : Country(KeyIsrael) + public object Italy : Country(KeyItaly) + public object Jamaica : Country(KeyJamaica) + public object Japan : Country(KeyJapan) + public object Jersey : Country(KeyJersey) + public object Jordan : Country(KeyJordan) + public object Kazakhstan : Country(KeyKazakhstan) + public object Kenya : Country(KeyKenya) + public object Kiribati : Country(KeyKiribati) + public object NorthKorea : Country(KeyNorthKorea) + public object SouthKorea : Country(KeySouthKorea) + public object Kuwait : Country(KeyKuwait) + public object Kyrgyzstan : Country(KeyKyrgyzstan) + public object Laos : Country(KeyLaos) + public object Latvia : Country(KeyLatvia) + public object Lebanon : Country(KeyLebanon) + public object Lesotho : Country(KeyLesotho) + public object Liberia : Country(KeyLiberia) + public object Libya : Country(KeyLibya) + public object Liechtenstein : Country(KeyLiechtenstein) + public object Lithuania : Country(KeyLithuania) + public object Luxembourg : Country(KeyLuxembourg) + public object Macau : Country(KeyMacau) + public object Madagascar : Country(KeyMadagascar) + public object Malawi : Country(KeyMalawi) + public object Malaysia : Country(KeyMalaysia) + public object Maldives : Country(KeyMaldives) + public object Mali : Country(KeyMali) + public object Malta : Country(KeyMalta) + public object MarshallIslands : Country(KeyMarshallIslands) + public object Martinique : Country(KeyMartinique) + public object Mauritania : Country(KeyMauritania) + public object Mauritius : Country(KeyMauritius) + public object Mayotte : Country(KeyMayotte) + public object Mexico : Country(KeyMexico) + public object Micronesia : Country(KeyMicronesia) + public object Moldova : Country(KeyMoldova) + public object Monaco : Country(KeyMonaco) + public object Mongolia : Country(KeyMongolia) + public object Montenegro : Country(KeyMontenegro) + public object Montserrat : Country(KeyMontserrat) + public object Morocco : Country(KeyMorocco) + public object Mozambique : Country(KeyMozambique) + public object Myanmar : Country(KeyMyanmar) + public object Namibia : Country(KeyNamibia) + public object Nauru : Country(KeyNauru) + public object Nepal : Country(KeyNepal) + public object Netherlands : Country(KeyNetherlands) + public object NewCaledonia : Country(KeyNewCaledonia) + public object NewZealand : Country(KeyNewZealand) + public object Nicaragua : Country(KeyNicaragua) + public object Niger : Country(KeyNiger) + public object Nigeria : Country(KeyNigeria) + public object Niue : Country(KeyNiue) + public object NorfolkIsland : Country(KeyNorfolkIsland) + public object NorthMacedonia : Country(KeyNorthMacedonia) + public object NorthernMarianaIslands : Country(KeyNorthernMarianaIslands) + public object Norway : Country(KeyNorway) + public object Oman : Country(KeyOman) + public object Pakistan : Country(KeyPakistan) + public object Palau : Country(KeyPalau) + public object Palestine : Country(KeyPalestine) + public object Panama : Country(KeyPanama) + public object PapuaNewGuinea : Country(KeyPapuaNewGuinea) + public object Paraguay : Country(KeyParaguay) + public object Peru : Country(KeyPeru) + public object Philippines : Country(KeyPhilippines) + public object PitcairnIslands : Country(KeyPitcairnIslands) + public object Poland : Country(KeyPoland) + public object Portugal : Country(KeyPortugal) + public object PuertoRico : Country(KeyPuertoRico) + public object Qatar : Country(KeyQatar) + public object Reunion : Country(KeyReunion) + public object Romania : Country(KeyRomania) + public object Russia : Country(KeyRussia) + public object Rwanda : Country(KeyRwanda) + public object SaintBarthelemy : Country(KeySaintBarthelemy) + public object SaintHelena : Country(KeySaintHelena) + public object SaintKittsAndNevis : Country(KeySaintKittsAndNevis) + public object SaintLucia : Country(KeySaintLucia) + public object SaintMartin : Country(KeySaintMartin) + public object SaintPierreAndMiquelon : Country(KeySaintPierreAndMiquelon) + public object SaintVincentAndTheGrenadines : Country(KeySaintVincentAndTheGrenadines) + public object Samoa : Country(KeySamoa) + public object SanMarino : Country(KeySanMarino) + public object SaoTomeAndPrincipe : Country(KeySaoTomeAndPrincipe) + public object SaudiArabia : Country(KeySaudiArabia) + public object Senegal : Country(KeySenegal) + public object Serbia : Country(KeySerbia) + public object Seychelles : Country(KeySeychelles) + public object SierraLeone : Country(KeySierraLeone) + public object Singapore : Country(KeySingapore) + public object SintMaarten : Country(KeySintMaarten) + public object Slovakia : Country(KeySlovakia) + public object Slovenia : Country(KeySlovenia) + public object SolomonIslands : Country(KeySolomonIslands) + public object Somalia : Country(KeySomalia) + public object SouthAfrica : Country(KeySouthAfrica) + public object SouthGeorgiaAndTheSouthSandwichIslands : Country(KeySouthGeorgiaAndTheSouthSandwichIslands) + public object SouthSudan : Country(KeySouthSudan) + public object Spain : Country(KeySpain) + public object SriLanka : Country(KeySriLanka) + public object Sudan : Country(KeySudan) + public object Suriname : Country(KeySuriname) + public object SvalbardAndJanMayen : Country(KeySvalbardAndJanMayen) + public object Sweden : Country(KeySweden) + public object Switzerland : Country(KeySwitzerland) + public object Syria : Country(KeySyria) + public object Taiwan : Country(KeyTaiwan) + public object Tajikistan : Country(KeyTajikistan) + public object Tanzania : Country(KeyTanzania) + public object Thailand : Country(KeyThailand) + public object TimorLeste : Country(KeyTimorLeste) + public object Togo : Country(KeyTogo) + public object Tokelau : Country(KeyTokelau) + public object Tonga : Country(KeyTonga) + public object TrinidadAndTobago : Country(KeyTrinidadAndTobago) + public object Tunisia : Country(KeyTunisia) + public object Turkey : Country(KeyTurkey) + public object Turkmenistan : Country(KeyTurkmenistan) + public object TurksAndCaicosIslands : Country(KeyTurksAndCaicosIslands) + public object Tuvalu : Country(KeyTuvalu) + public object Uganda : Country(KeyUganda) + public object Ukraine : Country(KeyUkraine) + public object UnitedArabEmirates : Country(KeyUnitedArabEmirates) + public object UnitedKingdom : Country(KeyUnitedKingdom) + public object UnitedStates : Country(KeyUnitedStates) + public object UnitedStatesMinorOutlyingIslands : Country(KeyUnitedStatesMinorOutlyingIslands) + public object Uruguay : Country(KeyUruguay) + public object Uzbekistan : Country(KeyUzbekistan) + public object Vanuatu : Country(KeyVanuatu) + public object Venezuela : Country(KeyVenezuela) + public object Vietnam : Country(KeyVietnam) + public object VirginIslandsGB : Country(KeyVirginIslandsGB) + public object VirginIslandsUS : Country(KeyVirginIslandsUS) + public object WallisAndFutuna : Country(KeyWallisAndFutuna) + public object WesternSahara : Country(KeyWesternSahara) + public object Yemen : Country(KeyYemen) + public object Zambia : Country(KeyZambia) + public object Zimbabwe : Country(KeyZimbabwe) + + public data class Other(override val raw: String) : Country(raw) + + companion object : KSerializer { + + private val serializer = StringSerializer + + override val descriptor = serializer.descriptor + + override fun serialize(encoder: Encoder, obj: Country) { + serializer.serialize(encoder, obj.raw) + } + + override fun deserialize(decoder: Decoder): Country { + return when (val string = serializer.deserialize(decoder)) { + KeyAfghanistan -> Afghanistan + KeyAlandIslands -> AlandIslands + KeyAlbania -> Albania + KeyAlgeria -> Algeria + KeyAmericanSamoa -> AmericanSamoa + KeyAndorra -> Andorra + KeyAngola -> Angola + KeyAnguilla -> Anguilla + KeyAntarctica -> Antarctica + KeyAntiguaAndBarbuda -> AntiguaAndBarbuda + KeyArgentina -> Argentina + KeyArmenia -> Armenia + KeyAruba -> Aruba + KeyAustralia -> Australia + KeyAustria -> Austria + KeyAzerbaijan -> Azerbaijan + KeyBahamas -> Bahamas + KeyBahrain -> Bahrain + KeyBangladesh -> Bangladesh + KeyBarbados -> Barbados + KeyBelarus -> Belarus + KeyBelgium -> Belgium + KeyBelize -> Belize + KeyBenin -> Benin + KeyBermuda -> Bermuda + KeyBhutan -> Bhutan + KeyBolivia -> Bolivia + KeyCaribbeanNetherlands -> CaribbeanNetherlands + KeyBosniaAndHerzegovina -> BosniaAndHerzegovina + KeyBotswana -> Botswana + KeyBouvetIsland -> BouvetIsland + KeyBrazil -> Brazil + KeyBritishIndianOceanTerritory -> BritishIndianOceanTerritory + KeyBruneiDarussalam -> BruneiDarussalam + KeyBulgaria -> Bulgaria + KeyBurkinaFaso -> BurkinaFaso + KeyBurundi -> Burundi + KeyCaboVerde -> CaboVerde + KeyCambodia -> Cambodia + KeyCameroon -> Cameroon + KeyCanada -> Canada + KeyCaymanIslands -> CaymanIslands + KeyCentralAfricanRepublic -> CentralAfricanRepublic + KeyChad -> Chad + KeyChile -> Chile + KeyChina -> China + KeyChristmasIsland -> ChristmasIsland + KeyCocosIslands -> CocosIslands + KeyColombia -> Colombia + KeyComoros -> Comoros + KeyRepublicOfTheCongo -> RepublicOfTheCongo + KeyDemocraticRepublicOfTheCongo -> DemocraticRepublicOfTheCongo + KeyCookIslands -> CookIslands + KeyCostaRica -> CostaRica + KeyIvoryCoast -> IvoryCoast + KeyCroatia -> Croatia + KeyCuba -> Cuba + KeyCuracao -> Curacao + KeyCyprus -> Cyprus + KeyCzechRepublic -> CzechRepublic + KeyDenmark -> Denmark + KeyDjibouti -> Djibouti + KeyDominica -> Dominica + KeyDominicanRepublic -> DominicanRepublic + KeyEcuador -> Ecuador + KeyEgypt -> Egypt + KeyElSalvador -> ElSalvador + KeyEquatorialGuinea -> EquatorialGuinea + KeyEritrea -> Eritrea + KeyEstonia -> Estonia + KeyEswatini -> Eswatini + KeyEthiopia -> Ethiopia + KeyFalklandIslands -> FalklandIslands + KeyFaroeIslands -> FaroeIslands + KeyFiji -> Fiji + KeyFinland -> Finland + KeyFrance -> France + KeyFrenchGuiana -> FrenchGuiana + KeyFrenchPolynesia -> FrenchPolynesia + KeyFrenchSouthernAndAntarcticLands -> FrenchSouthernAndAntarcticLands + KeyGabon -> Gabon + KeyGambia -> Gambia + KeyGeorgia -> Georgia + KeyGermany -> Germany + KeyGhana -> Ghana + KeyGibraltar -> Gibraltar + KeyGreece -> Greece + KeyGreenland -> Greenland + KeyGrenada -> Grenada + KeyGuadeloupe -> Guadeloupe + KeyGuam -> Guam + KeyGuatemala -> Guatemala + KeyBailiwickOfGuernsey -> BailiwickOfGuernsey + KeyGuinea -> Guinea + KeyGuineaBissau -> GuineaBissau + KeyGuyana -> Guyana + KeyHaiti -> Haiti + KeyHeardIslandAndMcDonaldIslands -> HeardIslandAndMcDonaldIslands + KeyVaticanCity -> VaticanCity + KeyHonduras -> Honduras + KeyHongKong -> HongKong + KeyHungary -> Hungary + KeyIceland -> Iceland + KeyIndia -> India + KeyIndonesia -> Indonesia + KeyIran -> Iran + KeyIraq -> Iraq + KeyIreland -> Ireland + KeyIsleOfMan -> IsleOfMan + KeyIsrael -> Israel + KeyItaly -> Italy + KeyJamaica -> Jamaica + KeyJapan -> Japan + KeyJersey -> Jersey + KeyJordan -> Jordan + KeyKazakhstan -> Kazakhstan + KeyKenya -> Kenya + KeyKiribati -> Kiribati + KeyNorthKorea -> NorthKorea + KeySouthKorea -> SouthKorea + KeyKuwait -> Kuwait + KeyKyrgyzstan -> Kyrgyzstan + KeyLaos -> Laos + KeyLatvia -> Latvia + KeyLebanon -> Lebanon + KeyLesotho -> Lesotho + KeyLiberia -> Liberia + KeyLibya -> Libya + KeyLiechtenstein -> Liechtenstein + KeyLithuania -> Lithuania + KeyLuxembourg -> Luxembourg + KeyMacau -> Macau + KeyMadagascar -> Madagascar + KeyMalawi -> Malawi + KeyMalaysia -> Malaysia + KeyMaldives -> Maldives + KeyMali -> Mali + KeyMalta -> Malta + KeyMarshallIslands -> MarshallIslands + KeyMartinique -> Martinique + KeyMauritania -> Mauritania + KeyMauritius -> Mauritius + KeyMayotte -> Mayotte + KeyMexico -> Mexico + KeyMicronesia -> Micronesia + KeyMoldova -> Moldova + KeyMonaco -> Monaco + KeyMongolia -> Mongolia + KeyMontenegro -> Montenegro + KeyMontserrat -> Montserrat + KeyMorocco -> Morocco + KeyMozambique -> Mozambique + KeyMyanmar -> Myanmar + KeyNamibia -> Namibia + KeyNauru -> Nauru + KeyNepal -> Nepal + KeyNetherlands -> Netherlands + KeyNewCaledonia -> NewCaledonia + KeyNewZealand -> NewZealand + KeyNicaragua -> Nicaragua + KeyNiger -> Niger + KeyNigeria -> Nigeria + KeyNiue -> Niue + KeyNorfolkIsland -> NorfolkIsland + KeyNorthMacedonia -> NorthMacedonia + KeyNorthernMarianaIslands -> NorthernMarianaIslands + KeyNorway -> Norway + KeyOman -> Oman + KeyPakistan -> Pakistan + KeyPalau -> Palau + KeyPalestine -> Palestine + KeyPanama -> Panama + KeyPapuaNewGuinea -> PapuaNewGuinea + KeyParaguay -> Paraguay + KeyPeru -> Peru + KeyPhilippines -> Philippines + KeyPitcairnIslands -> PitcairnIslands + KeyPoland -> Poland + KeyPortugal -> Portugal + KeyPuertoRico -> PuertoRico + KeyQatar -> Qatar + KeyReunion -> Reunion + KeyRomania -> Romania + KeyRussia -> Russia + KeyRwanda -> Rwanda + KeySaintBarthelemy -> SaintBarthelemy + KeySaintHelena -> SaintHelena + KeySaintKittsAndNevis -> SaintKittsAndNevis + KeySaintLucia -> SaintLucia + KeySaintMartin -> SaintMartin + KeySaintPierreAndMiquelon -> SaintPierreAndMiquelon + KeySaintVincentAndTheGrenadines -> SaintVincentAndTheGrenadines + KeySamoa -> Samoa + KeySanMarino -> SanMarino + KeySaoTomeAndPrincipe -> SaoTomeAndPrincipe + KeySaudiArabia -> SaudiArabia + KeySenegal -> Senegal + KeySerbia -> Serbia + KeySeychelles -> Seychelles + KeySierraLeone -> SierraLeone + KeySingapore -> Singapore + KeySintMaarten -> SintMaarten + KeySlovakia -> Slovakia + KeySlovenia -> Slovenia + KeySolomonIslands -> SolomonIslands + KeySomalia -> Somalia + KeySouthAfrica -> SouthAfrica + KeySouthGeorgiaAndTheSouthSandwichIslands -> SouthGeorgiaAndTheSouthSandwichIslands + KeySouthSudan -> SouthSudan + KeySpain -> Spain + KeySriLanka -> SriLanka + KeySudan -> Sudan + KeySuriname -> Suriname + KeySvalbardAndJanMayen -> SvalbardAndJanMayen + KeySweden -> Sweden + KeySwitzerland -> Switzerland + KeySyria -> Syria + KeyTaiwan -> Taiwan + KeyTajikistan -> Tajikistan + KeyTanzania -> Tanzania + KeyThailand -> Thailand + KeyTimorLeste -> TimorLeste + KeyTogo -> Togo + KeyTokelau -> Tokelau + KeyTonga -> Tonga + KeyTrinidadAndTobago -> TrinidadAndTobago + KeyTunisia -> Tunisia + KeyTurkey -> Turkey + KeyTurkmenistan -> Turkmenistan + KeyTurksAndCaicosIslands -> TurksAndCaicosIslands + KeyTuvalu -> Tuvalu + KeyUganda -> Uganda + KeyUkraine -> Ukraine + KeyUnitedArabEmirates -> UnitedArabEmirates + KeyUnitedKingdom -> UnitedKingdom + KeyUnitedStates -> UnitedStates + KeyUnitedStatesMinorOutlyingIslands -> UnitedStatesMinorOutlyingIslands + KeyUruguay -> Uruguay + KeyUzbekistan -> Uzbekistan + KeyVanuatu -> Vanuatu + KeyVenezuela -> Venezuela + KeyVietnam -> Vietnam + KeyVirginIslandsGB -> VirginIslandsGB + KeyVirginIslandsUS -> VirginIslandsUS + KeyWallisAndFutuna -> WallisAndFutuna + KeyWesternSahara -> WesternSahara + KeyYemen -> Yemen + KeyZambia -> Zambia + KeyZimbabwe -> Zimbabwe + else -> Other(string) + } + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/Place.kt b/src/commonMain/kotlin/com/algolia/search/model/places/Place.kt new file mode 100644 index 000000000..8c212d300 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/Place.kt @@ -0,0 +1,50 @@ +package com.algolia.search.model.places + +import com.algolia.search.model.ObjectID +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.RankingInfo +import kotlinx.serialization.json.JsonObject + + +public interface Place { + + val objectIDOrNull: ObjectID? + val administrativeOrNull: List? + val countryCodeOrNull: Country? + val postCodeOrNull: List? + val populationOrNull: Long? + val geolocationOrNull: List? + val highlightResultOrNull: JsonObject? + val tagsOrNull: List? + val importanceOrNull: Int? + val adminLevelOrNull: Int? + val districtOrNull: String? + val suburbOrNull: List? + val villageOrNull: List? + val isCountryOrNull: Boolean? + val isCityOrNull: Boolean? + val isSuburbOrNull: Boolean? + val isHighwayOrNull: Boolean? + val isPopularOrNull: Boolean? + val rankingInfoOrNull: RankingInfo? + + val objectID: ObjectID get() = objectIDOrNull!! + val administrative: List get() = administrativeOrNull!! + val countryCode: Country get() = countryCodeOrNull!! + val postCode: List get() = postCodeOrNull!! + val population: Long get() = populationOrNull!! + val geolocation: List get() = geolocationOrNull!! + val highlightResult: JsonObject get() = highlightResultOrNull!! + val tags: List get() = tagsOrNull!! + val importance: Int get() = importanceOrNull!! + val adminLevel: Int get() = adminLevelOrNull!! + val district: String get() = districtOrNull!! + val suburb: List get() = suburbOrNull!! + val village: List get() = villageOrNull!! + val isCountry: Boolean get() = isCountryOrNull!! + val isCity: Boolean get() = isCityOrNull!! + val isSuburb: Boolean get() = isSuburbOrNull!! + val isHighway: Boolean get() = isHighwayOrNull!! + val isPopular: Boolean get() = isPopularOrNull!! + val rankingInfo: RankingInfo get() = rankingInfoOrNull!! +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguage.kt b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguage.kt new file mode 100644 index 000000000..47e1a8efb --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguage.kt @@ -0,0 +1,55 @@ +package com.algolia.search.model.places + +import com.algolia.search.model.ObjectID +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.RankingInfo +import com.algolia.search.serialize.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient +import kotlinx.serialization.json.JsonObject + + +@Serializable +data class PlaceLanguage( + @SerialName(KeyCountry) val countryOrNull: String? = null, + @SerialName(KeyCounty) val countyOrNull: List? = null, + @SerialName(KeyCity) val cityOrNull: List? = null, + @SerialName(KeyLocaleNames) val localNamesOrNull: List? = null, + @SerialName(KeyObjectID) override val objectIDOrNull: ObjectID? = null, + @SerialName(KeyAdministrative) override val administrativeOrNull: List? = null, + @SerialName(KeyCountryCode) override val countryCodeOrNull: Country? = null, + @SerialName(KeyPostCode) override val postCodeOrNull: List? = null, + @SerialName(KeyPopulation) override val populationOrNull: Long? = null, + @SerialName(Key_Geoloc) @Serializable(KSerializerGeoPoints::class) override val geolocationOrNull: List? = null, + @SerialName(Key_HighlightResult) override val highlightResultOrNull: JsonObject? = null, + @SerialName(KeyImportance) override val importanceOrNull: Int? = null, + @SerialName(Key_Tags) override val tagsOrNull: List? = null, + @SerialName(KeyAdmin_Level) override val adminLevelOrNull: Int? = null, + @SerialName(KeyDistrict) override val districtOrNull: String? = null, + @SerialName(KeySuburb) override val suburbOrNull: List? = null, + @SerialName(KeyVillage) override val villageOrNull: List? = null, + @SerialName(KeyIs_Country) override val isCountryOrNull: Boolean? = null, + @SerialName(KeyIs_City) override val isCityOrNull: Boolean? = null, + @SerialName(KeyIs_Suburb) override val isSuburbOrNull: Boolean? = null, + @SerialName(KeyIs_Highway) override val isHighwayOrNull: Boolean? = null, + @SerialName(KeyIs_Popular) override val isPopularOrNull: Boolean? = null, + @SerialName(Key_RankingInfo) override val rankingInfoOrNull: RankingInfo? = null +) : Place { + + @Transient + val country: String + get() = countryOrNull!! + + @Transient + val county: List + get() = countyOrNull!! + + @Transient + val city: List + get () = cityOrNull!! + + @Transient + val localNames: List + get() = localNamesOrNull!! +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguages.kt b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguages.kt new file mode 100644 index 000000000..e7bda32b3 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceLanguages.kt @@ -0,0 +1,56 @@ +package com.algolia.search.model.places + +import com.algolia.search.model.ObjectID +import com.algolia.search.model.search.Language +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.RankingInfo +import com.algolia.search.serialize.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient +import kotlinx.serialization.json.JsonObject + + +@Serializable +data class PlaceLanguages( + @SerialName(KeyCountry) val countryOrNull: Map? = null, + @SerialName(KeyCounty) val countyOrNull: Map>? = null, + @SerialName(KeyCity) val cityOrNull: Map>? = null, + @SerialName(KeyLocaleNames) val localNamesOrNull: Map>? = null, + @SerialName(KeyObjectID) override val objectIDOrNull: ObjectID? = null, + @SerialName(KeyAdministrative) override val administrativeOrNull: List? = null, + @SerialName(KeyCountryCode) override val countryCodeOrNull: Country? = null, + @SerialName(KeyPostCode) override val postCodeOrNull: List? = null, + @SerialName(KeyPopulation) override val populationOrNull: Long? = null, + @SerialName(Key_Geoloc) @Serializable(KSerializerGeoPoints::class) override val geolocationOrNull: List? = null, + @SerialName(Key_HighlightResult) override val highlightResultOrNull: JsonObject? = null, + @SerialName(KeyImportance) override val importanceOrNull: Int? = null, + @SerialName(Key_Tags) override val tagsOrNull: List? = null, + @SerialName(KeyAdmin_Level) override val adminLevelOrNull: Int? = null, + @SerialName(KeyDistrict) override val districtOrNull: String? = null, + @SerialName(KeySuburb) override val suburbOrNull: List? = null, + @SerialName(KeyVillage) override val villageOrNull: List? = null, + @SerialName(KeyIs_Country) override val isCountryOrNull: Boolean? = null, + @SerialName(KeyIs_City) override val isCityOrNull: Boolean? = null, + @SerialName(KeyIs_Suburb) override val isSuburbOrNull: Boolean? = null, + @SerialName(KeyIs_Highway) override val isHighwayOrNull: Boolean? = null, + @SerialName(KeyIs_Popular) override val isPopularOrNull: Boolean? = null, + @SerialName(Key_RankingInfo) override val rankingInfoOrNull: RankingInfo? = null +) : Place { + + @Transient + val country: Map + get() = countryOrNull!! + + @Transient + val county: Map> + get() = countyOrNull!! + + @Transient + val city: Map> + get () = cityOrNull!! + + @Transient + val localNames: Map> + get() = localNamesOrNull!! +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/PlaceType.kt b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceType.kt new file mode 100644 index 000000000..081d04cd5 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/PlaceType.kt @@ -0,0 +1,54 @@ +package com.algolia.search.model.places + +import com.algolia.search.model.Raw +import com.algolia.search.serialize.* +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.internal.StringSerializer + + +@Serializable(PlaceType.Companion::class) +sealed class PlaceType(override val raw: String) : Raw { + + public object City : PlaceType(KeyCity) + + public object Country : PlaceType(KeyCountry) + + public object Address : PlaceType(KeyAddress) + + public object BusStop : PlaceType(KeyBusStop) + + public object TrainStation : PlaceType(KeyTrainStation) + + public object TownHall : PlaceType(KeyTownhall) + + public object Airport : PlaceType(KeyAirport) + + public data class Other(override val raw: String) : PlaceType(raw) + + companion object : KSerializer { + + private val serializer = StringSerializer + + override val descriptor = serializer.descriptor + + override fun serialize(encoder: Encoder, obj: PlaceType) { + serializer.serialize(encoder, obj.raw) + } + + override fun deserialize(decoder: Decoder): PlaceType { + return when (val string = serializer.deserialize(decoder)) { + KeyCity -> City + KeyCountry -> Country + KeyAddress -> Address + KeyBusStop -> BusStop + KeyTrainStation -> TrainStation + KeyTownhall -> TownHall + KeyAirport -> Airport + else -> Other(string) + } + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/places/PlacesQuery.kt b/src/commonMain/kotlin/com/algolia/search/model/places/PlacesQuery.kt new file mode 100644 index 000000000..03df2efc2 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/places/PlacesQuery.kt @@ -0,0 +1,56 @@ +package com.algolia.search.model.places + +import com.algolia.search.dsl.DSLParameters +import com.algolia.search.model.search.AroundRadius +import com.algolia.search.model.search.Point +import com.algolia.search.model.search.Language +import com.algolia.search.serialize.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + + +@Serializable +@DSLParameters +data class PlacesQuery( + /** + * The query to match places by name. + */ + @SerialName(KeyQuery) var query: String? = null, + /** + * Restrict the search results to a specific type. + */ + @SerialName(KeyType) var type: PlaceType? = null, + /** + * Engine default: Search on the whole planet. + * If specified, restrict the search results to a specific list of countries. + */ + @SerialName(KeyCountries) var countries: List? = null, + /** + * Force to first search around a specific latitude longitude. + */ + @SerialName(KeyAroundLatLng) var aroundLatLng: Point? = null, + /** + * Engine default: true + * Whether or not to first search around the geolocation of the user found via his IP address. + */ + @SerialName(KeyAroundLatLngViaIP) var aroundLatLngViaIP: Boolean? = null, + /** + * Radius in meters to search around the latitude/longitude. + * Otherwise a default radius is automatically computed given the area density. + */ + @SerialName(KeyAroundRadius) var aroundRadius: AroundRadius? = null, + /** + * Engine default: false + * Controls whether the _rankingInfo object should be included in the hits. + */ + @SerialName(KeyGetRankingInfo) var getRankingInfo: Boolean? = null, + /** + * Engine default: 20 + * Specifies how many results you want to retrieve per search. + */ + @SerialName(KeyHitsPerPage) var hitsPerPage: Int? = null +) { + + @SerialName(KeyLanguage) + internal var language: Language? = null +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/request/RequestEmptyBody.kt b/src/commonMain/kotlin/com/algolia/search/model/request/RequestEmptyBody.kt new file mode 100644 index 000000000..552a423dd --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/request/RequestEmptyBody.kt @@ -0,0 +1,4 @@ +package com.algolia.search.model.request + + +internal const val EmptyBody = "" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlaces.kt b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlaces.kt new file mode 100644 index 000000000..2d74bf188 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlaces.kt @@ -0,0 +1,17 @@ +package com.algolia.search.model.response + + +public interface ResponseSearchPlaces { + + val hits: List + val nbHits: Int + val processingTimeMS: Long + val params: String + val queryOrNull: String? + val degradedQueryOrNull: String? + val parsedQueryOrNull: String? + + val query: String get() = queryOrNull!! + val degradedQuery: String get() = degradedQueryOrNull!! + val parsedQuery: String get() = parsedQueryOrNull!! +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMono.kt b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMono.kt new file mode 100644 index 000000000..bb200ae02 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMono.kt @@ -0,0 +1,19 @@ +package com.algolia.search.model.response + +import com.algolia.search.model.places.PlaceLanguage +import com.algolia.search.serialize.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + + +@Serializable +public data class ResponseSearchPlacesMono( + @SerialName(KeyHits) override val hits: List, + @SerialName(KeyNbHits) override val nbHits: Int, + @SerialName(KeyProcessingTimeMS) override val processingTimeMS: Long, + @SerialName(KeyParams) override val params: String, + @SerialName(KeyQuery) override val queryOrNull: String? = null, + @SerialName(KeyDegradedQuery) override val degradedQueryOrNull: String? = null, + @SerialName(KeyParsedQuery) override val parsedQueryOrNull: String? = null +) : ResponseSearchPlaces + diff --git a/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMulti.kt b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMulti.kt new file mode 100644 index 000000000..545507e1b --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/response/ResponseSearchPlacesMulti.kt @@ -0,0 +1,18 @@ +package com.algolia.search.model.response + +import com.algolia.search.model.places.PlaceLanguages +import com.algolia.search.serialize.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + + +@Serializable +public data class ResponseSearchPlacesMulti( + @SerialName(KeyHits) override val hits: List, + @SerialName(KeyNbHits) override val nbHits: Int, + @SerialName(KeyProcessingTimeMS) override val processingTimeMS: Long, + @SerialName(KeyParams) override val params: String, + @SerialName(KeyQuery) override val queryOrNull: String? = null, + @SerialName(KeyDegradedQuery) override val degradedQueryOrNull: String? = null, + @SerialName(KeyParsedQuery) override val parsedQueryOrNull: String? = null +) : ResponseSearchPlaces \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/rule/RuleQuery.kt b/src/commonMain/kotlin/com/algolia/search/model/rule/RuleQuery.kt index 343dda720..ebc645a6b 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/rule/RuleQuery.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/rule/RuleQuery.kt @@ -1,5 +1,6 @@ package com.algolia.search.model.rule +import com.algolia.search.dsl.DSLParameters import com.algolia.search.serialize.* import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -7,6 +8,7 @@ import kotlinx.serialization.Transient @Suppress("PropertyName") +@DSLParameters @Serializable public data class RuleQuery( /** diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/IgnorePlurals.kt b/src/commonMain/kotlin/com/algolia/search/model/search/IgnorePlurals.kt index 6de194437..d20df148d 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/search/IgnorePlurals.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/search/IgnorePlurals.kt @@ -25,12 +25,12 @@ public sealed class IgnorePlurals { public object False: IgnorePlurals() /** - * A list of [QueryLanguage] for which ignoring plurals should be enabled. + * A list of [Language] for which ignoring plurals should be enabled. * This list of [queryLanguages] will override any values that you may have set in [Settings.queryLanguages]. */ - public data class QueryLanguages(val queryLanguages: List) : IgnorePlurals() { + public data class QueryLanguages(val queryLanguages: List) : IgnorePlurals() { - public constructor(vararg queryLanguage: QueryLanguage) : this(queryLanguage.toList()) + public constructor(vararg queryLanguage: Language) : this(queryLanguage.toList()) } @Serializer(IgnorePlurals::class) @@ -40,14 +40,14 @@ public sealed class IgnorePlurals { when (obj) { is True -> BooleanSerializer.serialize(encoder, true) is False -> BooleanSerializer.serialize(encoder, false) - is QueryLanguages -> QueryLanguage.list.serialize(encoder, obj.queryLanguages) + is QueryLanguages -> Language.list.serialize(encoder, obj.queryLanguages) } } override fun deserialize(decoder: Decoder): IgnorePlurals { return when (val element = decoder.asJsonInput()) { is JsonArray -> QueryLanguages(element.map { - JsonNonStrict.fromJson(QueryLanguage, it) + JsonNonStrict.fromJson(Language, it) }) is JsonLiteral -> if (element.boolean) True else False else -> throw Exception() diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/Language.kt b/src/commonMain/kotlin/com/algolia/search/model/search/Language.kt new file mode 100644 index 000000000..b22d3ad09 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/model/search/Language.kt @@ -0,0 +1,160 @@ +package com.algolia.search.model.search + +import com.algolia.search.model.Raw +import com.algolia.search.serialize.* +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.internal.StringSerializer + + +@Deprecated( + message = "Obsolete name from the preview version of library.", + replaceWith = ReplaceWith("Language"), + level = DeprecationLevel.WARNING +) +public typealias QueryLanguage = Language + +/** + * List of supported languages with their associated language ISO code. + */ +@Serializable(Language.Companion::class) +public sealed class Language(override val raw: String) : Raw { + + public object Afrikaans : Language(KeyAfrikaans) + public object Arabic : Language(KeyArabic) + public object Azeri : Language(KeyAzeri) + public object Bulgarian : Language(KeyBulgarian) + public object Brunei : Language(KeyBrunei) + public object Catalan : Language(KeyCatalan) + public object Czech : Language(KeyCzech) + public object Welsh : Language(KeyWelsh) + public object Danish : Language(KeyDanish) + public object German : Language(KeyGerman) + public object English : Language(KeyEnglish) + public object Esperanto : Language(KeyEsperanto) + public object Spanish : Language(KeySpanish) + public object Estonian : Language(KeyEstonian) + public object Basque : Language(KeyBasque) + public object Finnish : Language(KeyFinnish) + public object Faroese : Language(KeyFaroese) + public object French : Language(KeyFrench) + public object Galician : Language(KeyGalician) + public object Hebrew : Language(KeyHebrew) + public object Hindi : Language(KeyHindi) + public object Hungarian : Language(KeyHungarian) + public object Armenian : Language(KeyArmenian) + public object Indonesian : Language(KeyIndonesian) + public object Icelandic : Language(KeyIcelandic) + public object Italian : Language(KeyItalian) + public object Japanese : Language(KeyJapanese) + public object Georgian : Language(KeyGeorgian) + public object Kazakh : Language(KeyKazakh) + public object Korean : Language(KeyKorean) + public object Kyrgyz : Language(KeyKyrgyz) + public object Lithuanian : Language(KeyLithuanian) + public object Maori : Language(KeyMaori) + public object Mongolian : Language(KeyMongolian) + public object Marathi : Language(KeyMarathi) + public object Malay : Language(KeyMalay) + public object Maltese : Language(KeyMaltese) + public object Norwegian : Language(KeyNorwegian) + public object Dutch : Language(KeyDutch) + public object NorthernSotho : Language(KeyNorthernSotho) + public object Polish : Language(KeyPolish) + public object Pashto : Language(KeyPashto) + public object Portuguese : Language(KeyPortuguese) + public object Quechua : Language(KeyQuechua) + public object Romanian : Language(KeyRomanian) + public object Russian : Language(KeyRussian) + public object Slovak : Language(KeySlovak) + public object Albanian : Language(KeyAlbanian) + public object Swedish : Language(KeySwedish) + public object Swahili : Language(KeySwahili) + public object Tamil : Language(KeyTamil) + public object Telugu : Language(KeyTelugu) + public object Tagalog : Language(KeyTagalog) + public object Tswana : Language(KeyTswana) + public object Turkish : Language(KeyTurkish) + public object Tatar : Language(KeyTatar) + + public data class Other(override val raw: String) : Language(raw) + + override fun toString(): String { + return raw + } + + companion object : KSerializer { + + private val serializer = StringSerializer + + override val descriptor = serializer.descriptor + + override fun serialize(encoder: Encoder, obj: Language) { + serializer.serialize(encoder, obj.raw) + } + + override fun deserialize(decoder: Decoder): Language { + return when (val string = serializer.deserialize(decoder)) { + KeyAfrikaans -> Afrikaans + KeyArabic -> Arabic + KeyAzeri -> Azeri + KeyBulgarian -> Bulgarian + KeyBrunei -> Brunei + KeyCatalan -> Catalan + KeyCzech -> Czech + KeyWelsh -> Welsh + KeyDanish -> Danish + KeyGerman -> German + KeyEnglish -> English + KeyEsperanto -> Esperanto + KeySpanish -> Spanish + KeyEstonian -> Estonian + KeyBasque -> Basque + KeyFinnish -> Finnish + KeyFaroese -> Faroese + KeyFrench -> French + KeyGalician -> Galician + KeyHebrew -> Hebrew + KeyHindi -> Hindi + KeyHungarian -> Hungarian + KeyArmenian -> Armenian + KeyIndonesian -> Indonesian + KeyIcelandic -> Icelandic + KeyItalian -> Italian + KeyJapanese -> Japanese + KeyGeorgian -> Georgian + KeyKazakh -> Kazakh + KeyKorean -> Korean + KeyKyrgyz -> Kyrgyz + KeyLithuanian -> Lithuanian + KeyMaori -> Maori + KeyMongolian -> Mongolian + KeyMarathi -> Marathi + KeyMalay -> Malay + KeyMaltese -> Maltese + KeyNorwegian -> Norwegian + KeyDutch -> Dutch + KeyNorthernSotho -> NorthernSotho + KeyPolish -> Polish + KeyPashto -> Pashto + KeyPortuguese -> Portuguese + KeyQuechua -> Quechua + KeyRomanian -> Romanian + KeyRussian -> Russian + KeySlovak -> Slovak + KeyAlbanian -> Albanian + KeySwedish -> Swedish + KeySwahili -> Swahili + KeyTamil -> Tamil + KeyTelugu -> Telugu + KeyTagalog -> Tagalog + KeyTswana -> Tswana + KeyTurkish -> Turkish + KeyTatar -> Tatar + else -> Other(string) + } + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/Query.kt b/src/commonMain/kotlin/com/algolia/search/model/search/Query.kt index 79735e065..0d2efe4a3 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/search/Query.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/search/Query.kt @@ -280,7 +280,7 @@ public data class Query( * Engine default: [] * [Documentation][https://www.algolia.com/doc/api-reference/api-parameters/queryLanguages/?language=kotlin] */ - @SerialName(KeyQueryLanguages) var queryLanguages: List? = null, + @SerialName(KeyQueryLanguages) var queryLanguages: List? = null, /** * Whether rules should be globally enabled. @@ -455,5 +455,17 @@ public data class Query( * Engine default: true * [Documentation][https://www.algolia.com/doc/api-reference/api-parameters/percentileComputation/?language=kotlin] */ - @SerialName(KeyPercentileComputation) var percentileComputation: Boolean? = null + @SerialName(KeyPercentileComputation) var percentileComputation: Boolean? = null, + /** + * Overrides the query parameter and performs a more generic search that can be used to find "similar" results. + * Engine default: "" + * [Documentation][https://www.algolia.com/doc/api-reference/api-parameters/similarQuery/?language=kotlin] + */ + @SerialName(KeySimilarQuery) var similarQuery: String? = null, + /** + * Whether this query should be taken into consideration by currently active ABTests. + * Engine default: true + * [Documentation][https://www.algolia.com/doc/api-reference/api-parameters/enableABTest/?language=kotlin] + */ + @SerialName(KeyEnableABTest) var enableABTest: Boolean? = null ) \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/QueryLanguage.kt b/src/commonMain/kotlin/com/algolia/search/model/search/QueryLanguage.kt deleted file mode 100644 index 3d036f66f..000000000 --- a/src/commonMain/kotlin/com/algolia/search/model/search/QueryLanguage.kt +++ /dev/null @@ -1,154 +0,0 @@ -package com.algolia.search.model.search - -import com.algolia.search.model.Raw -import com.algolia.search.serialize.* -import kotlinx.serialization.Decoder -import kotlinx.serialization.Encoder -import kotlinx.serialization.KSerializer -import kotlinx.serialization.Serializable -import kotlinx.serialization.internal.StringSerializer -import kotlinx.serialization.json.JsonNull.content - - -/** - * List of supported languages with their associated language ISO code. - */ -@Serializable(QueryLanguage.Companion::class) -public sealed class QueryLanguage(override val raw: String) : Raw { - - public object Afrikaans : QueryLanguage(KeyAfrikaans) - public object Arabic : QueryLanguage(KeyArabic) - public object Azeri : QueryLanguage(KeyAzeri) - public object Bulgarian : QueryLanguage(KeyBulgarian) - public object Brunei : QueryLanguage(KeyBrunei) - public object Catalan : QueryLanguage(KeyCatalan) - public object Czech : QueryLanguage(KeyCzech) - public object Welsh : QueryLanguage(KeyWelsh) - public object Danish : QueryLanguage(KeyDanish) - public object German : QueryLanguage(KeyGerman) - public object English : QueryLanguage(KeyEnglish) - public object Esperanto : QueryLanguage(KeyEsperanto) - public object Spanish : QueryLanguage(KeySpanish) - public object Estonian : QueryLanguage(KeyEstonian) - public object Basque : QueryLanguage(KeyBasque) - public object Finnish : QueryLanguage(KeyFinnish) - public object Faroese : QueryLanguage(KeyFaroese) - public object French : QueryLanguage(KeyFrench) - public object Galician : QueryLanguage(KeyGalician) - public object Hebrew : QueryLanguage(KeyHebrew) - public object Hindi : QueryLanguage(KeyHindi) - public object Hungarian : QueryLanguage(KeyHungarian) - public object Armenian : QueryLanguage(KeyArmenian) - public object Indonesian : QueryLanguage(KeyIndonesian) - public object Icelandic : QueryLanguage(KeyIcelandic) - public object Italian : QueryLanguage(KeyItalian) - public object Japanese : QueryLanguage(KeyJapanese) - public object Georgian : QueryLanguage(KeyGeorgian) - public object Kazakh : QueryLanguage(KeyKazakh) - public object Korean : QueryLanguage(KeyKorean) - public object Kyrgyz : QueryLanguage(KeyKyrgyz) - public object Lithuanian : QueryLanguage(KeyLithuanian) - public object Maori : QueryLanguage(KeyMaori) - public object Mongolian : QueryLanguage(KeyMongolian) - public object Marathi : QueryLanguage(KeyMarathi) - public object Malay : QueryLanguage(KeyMalay) - public object Maltese : QueryLanguage(KeyMaltese) - public object Norwegian : QueryLanguage(KeyNorwegian) - public object Dutch : QueryLanguage(KeyDutch) - public object NorthernSotho : QueryLanguage(KeyNorthernSotho) - public object Polish : QueryLanguage(KeyPolish) - public object Pashto : QueryLanguage(KeyPashto) - public object Portuguese : QueryLanguage(KeyPortuguese) - public object Quechua : QueryLanguage(KeyQuechua) - public object Romanian : QueryLanguage(KeyRomanian) - public object Russian : QueryLanguage(KeyRussian) - public object Slovak : QueryLanguage(KeySlovak) - public object Albanian : QueryLanguage(KeyAlbanian) - public object Swedish : QueryLanguage(KeySwedish) - public object Swahili : QueryLanguage(KeySwahili) - public object Tamil : QueryLanguage(KeyTamil) - public object Telugu : QueryLanguage(KeyTelugu) - public object Tagalog : QueryLanguage(KeyTagalog) - public object Tswana : QueryLanguage(KeyTswana) - public object Turkish : QueryLanguage(KeyTurkish) - public object Tatar : QueryLanguage(KeyTatar) - - public data class Other(override val raw: String) : QueryLanguage(raw) - - override fun toString(): String { - return raw - } - - companion object : KSerializer { - - private val serializer = StringSerializer - - override val descriptor = serializer.descriptor - - override fun serialize(encoder: Encoder, obj: QueryLanguage) { - serializer.serialize(encoder, obj.raw) - } - - override fun deserialize(decoder: Decoder): QueryLanguage { - return when (serializer.deserialize(decoder)) { - KeyAfrikaans -> Afrikaans - KeyArabic -> Arabic - KeyAzeri -> Azeri - KeyBulgarian -> Bulgarian - KeyBrunei -> Brunei - KeyCatalan -> Catalan - KeyCzech -> Czech - KeyWelsh -> Welsh - KeyDanish -> Danish - KeyGerman -> German - KeyEnglish -> English - KeyEsperanto -> Esperanto - KeySpanish -> Spanish - KeyEstonian -> Estonian - KeyBasque -> Basque - KeyFinnish -> Finnish - KeyFaroese -> Faroese - KeyFrench -> French - KeyGalician -> Galician - KeyHebrew -> Hebrew - KeyHindi -> Hindi - KeyHungarian -> Hungarian - KeyArmenian -> Armenian - KeyIndonesian -> Indonesian - KeyIcelandic -> Icelandic - KeyItalian -> Italian - KeyJapanese -> Japanese - KeyGeorgian -> Georgian - KeyKazakh -> Kazakh - KeyKorean -> Korean - KeyKyrgyz -> Kyrgyz - KeyLithuanian -> Lithuanian - KeyMaori -> Maori - KeyMongolian -> Mongolian - KeyMarathi -> Marathi - KeyMalay -> Malay - KeyMaltese -> Maltese - KeyNorwegian -> Norwegian - KeyDutch -> Dutch - KeyNorthernSotho -> NorthernSotho - KeyPolish -> Polish - KeyPashto -> Pashto - KeyPortuguese -> Portuguese - KeyQuechua -> Quechua - KeyRomanian -> Romanian - KeyRussian -> Russian - KeySlovak -> Slovak - KeyAlbanian -> Albanian - KeySwedish -> Swedish - KeySwahili -> Swahili - KeyTamil -> Tamil - KeyTelugu -> Telugu - KeyTagalog -> Tagalog - KeyTswana -> Tswana - KeyTurkish -> Turkish - KeyTatar -> Tatar - else -> Other(content) - } - } - } -} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/RankingInfo.kt b/src/commonMain/kotlin/com/algolia/search/model/search/RankingInfo.kt index e60f81eab..fc3c4d005 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/search/RankingInfo.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/search/RankingInfo.kt @@ -1,5 +1,6 @@ package com.algolia.search.model.search +import com.algolia.search.endpoint.EndpointPlaces import com.algolia.search.model.settings.RankingCriterion import com.algolia.search.model.settings.Settings import com.algolia.search.serialize.* @@ -12,7 +13,7 @@ public data class RankingInfo( /** * Present and set to true if a query rule promoted the hit. */ - @SerialName(KeyPromoted) val promoted: Boolean, + @SerialName(KeyPromoted) val promoted: Boolean? = null, /** * Number of typos encountered when matching the record. * Corresponds to the [RankingCriterion.Typo] in the ranking formula. @@ -60,5 +61,13 @@ public data class RankingInfo( /** * Geo location that matched the query. Only returned if [Query.aroundRadius] is used. */ - @SerialName(KeyMatchedGeoLocation) val matchedGeoLocation: MatchedGeoLocation? = null + @SerialName(KeyMatchedGeoLocation) val matchedGeoLocation: MatchedGeoLocation? = null, + /** + * Only returned for [EndpointPlaces.searchPlaces]. + */ + @SerialName(KeyGeoPoint) @Serializable(KSerializerGeoPoint::class) val geoPoint: Point? = null, + /** + * Only returned for [EndpointPlaces.searchPlaces]. + */ + @SerialName(KeyQuery) val query: String? = null ) \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/search/RemoveStopWords.kt b/src/commonMain/kotlin/com/algolia/search/model/search/RemoveStopWords.kt index 9ef6297d6..d00af1d6d 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/search/RemoveStopWords.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/search/RemoveStopWords.kt @@ -14,7 +14,7 @@ public sealed class RemoveStopWords { /** * Enables the stop word functionality, ensuring that stop words are removed from consideration in a search. - * The languages supported here are either every language (this is the default, see list of [QueryLanguage]), + * The languages supported here are either every language (this is the default, see list of [Language]), * or those set by queryLanguages. See queryLanguages example below. */ public object True: RemoveStopWords() @@ -25,12 +25,12 @@ public sealed class RemoveStopWords { public object False: RemoveStopWords() /** - * A list of [QueryLanguage] for which ignoring plurals should be enabled. + * A list of [Language] for which ignoring plurals should be enabled. * This list of [queryLanguages] will override any values that you may have set in [Settings.queryLanguages]. */ - public data class QueryLanguages(val queryLanguages: List) : RemoveStopWords() { + public data class QueryLanguages(val queryLanguages: List) : RemoveStopWords() { - constructor(vararg queryLanguage: QueryLanguage) : this(queryLanguage.toList()) + constructor(vararg queryLanguage: Language) : this(queryLanguage.toList()) } @Serializer(RemoveStopWords::class) @@ -40,14 +40,14 @@ public sealed class RemoveStopWords { when (obj) { is True -> BooleanSerializer.serialize(encoder, true) is False -> BooleanSerializer.serialize(encoder, false) - is QueryLanguages -> QueryLanguage.list.serialize(encoder, obj.queryLanguages) + is QueryLanguages -> Language.list.serialize(encoder, obj.queryLanguages) } } override fun deserialize(decoder: Decoder): RemoveStopWords { return when (val element = decoder.asJsonInput()) { is JsonArray -> QueryLanguages(element.map { - JsonNonStrict.fromJson(QueryLanguage, it) + JsonNonStrict.fromJson(Language, it) }) is JsonLiteral -> if (element.boolean) True else False else -> throw Exception() diff --git a/src/commonMain/kotlin/com/algolia/search/model/settings/DecompoundedAttributes.kt b/src/commonMain/kotlin/com/algolia/search/model/settings/DecompoundedAttributes.kt index 36e2dae76..7538bd625 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/settings/DecompoundedAttributes.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/settings/DecompoundedAttributes.kt @@ -1,7 +1,7 @@ package com.algolia.search.model.settings import com.algolia.search.model.Attribute -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import kotlinx.serialization.* import kotlinx.serialization.internal.HashMapSerializer @@ -16,32 +16,32 @@ import kotlinx.serialization.internal.HashMapSerializer */ @Serializable(DecompoundedAttributes.Companion::class) public data class DecompoundedAttributes internal constructor( - val map: Map> + val map: Map> ) { internal constructor( - language: QueryLanguage, + language: Language, attributes: List ) : this(mapOf(language to attributes.toList())) public constructor( - language: QueryLanguage.German, + language: Language.German, vararg attributes: Attribute ) : this(language, attributes.toList()) public constructor( - language: QueryLanguage.Finnish, + language: Language.Finnish, vararg attributes: Attribute ) : this(language, attributes.toList()) public constructor( - language: QueryLanguage.Dutch, + language: Language.Dutch, vararg attributes: Attribute ) : this(language, attributes.toList()) companion object : KSerializer { - private val serializer = HashMapSerializer(QueryLanguage, Attribute.list) + private val serializer = HashMapSerializer(Language, Attribute.list) override val descriptor: SerialDescriptor = serializer.descriptor diff --git a/src/commonMain/kotlin/com/algolia/search/model/settings/Settings.kt b/src/commonMain/kotlin/com/algolia/search/model/settings/Settings.kt index e0050dcba..f3fff5dee 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/settings/Settings.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/settings/Settings.kt @@ -7,6 +7,7 @@ import com.algolia.search.model.search.* import com.algolia.search.serialize.* import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonObject @Serializable @@ -224,7 +225,7 @@ public data class Settings( * Engine default: [] * [Documentation][https://www.algolia.com/doc/api-reference/api-parameters/queryLanguages/?language=kotlin] */ - @SerialName(KeyQueryLanguages) var queryLanguages: List? = null, + @SerialName(KeyQueryLanguages) var queryLanguages: List? = null, /** * Whether rules should be globally enabled. @@ -352,5 +353,15 @@ public data class Settings( /** * Settings version. */ - @SerialName(KeyVersion) var version: Int? = null -) \ No newline at end of file + @SerialName(KeyVersion) var version: Int? = null, + /** + * Lets you store custom data in your indices. + */ + @SerialName(KeyUserData) var userData: JsonObject? = null +) { + + /** + * This parameter keeps track of which primary index (if any) a replica is connected to. + */ + @SerialName(KeyPrimary) val primary: IndexName? = null +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/model/synonym/SynonymQuery.kt b/src/commonMain/kotlin/com/algolia/search/model/synonym/SynonymQuery.kt index 8077eabfe..c185a23d2 100644 --- a/src/commonMain/kotlin/com/algolia/search/model/synonym/SynonymQuery.kt +++ b/src/commonMain/kotlin/com/algolia/search/model/synonym/SynonymQuery.kt @@ -1,5 +1,6 @@ package com.algolia.search.model.synonym +import com.algolia.search.dsl.DSLParameters import com.algolia.search.serialize.* import kotlinx.serialization.Encoder import kotlinx.serialization.Serializable @@ -8,6 +9,7 @@ import kotlinx.serialization.Serializer import kotlinx.serialization.json.json +@DSLParameters @Serializable(SynonymQuery.Companion::class) public data class SynonymQuery( /** diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/Countries.kt b/src/commonMain/kotlin/com/algolia/search/serialize/Countries.kt new file mode 100644 index 000000000..75a3f017e --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/serialize/Countries.kt @@ -0,0 +1,252 @@ +package com.algolia.search.serialize + + +public const val KeyAfghanistan = "af" +public const val KeyAlandIslands = "ax" +public const val KeyAlbania = "al" +public const val KeyAlgeria = "dz" +public const val KeyAmericanSamoa = "as" +public const val KeyAndorra = "ad" +public const val KeyAngola = "ao" +public const val KeyAnguilla = "ai" +public const val KeyAntarctica = "aq" +public const val KeyAntiguaAndBarbuda = "ag" +public const val KeyArgentina = "ar" +public const val KeyArmenia = "am" +public const val KeyAruba = "aw" +public const val KeyAustralia = "au" +public const val KeyAustria = "at" +public const val KeyAzerbaijan = "az" +public const val KeyBahamas = "bs" +public const val KeyBahrain = "bh" +public const val KeyBangladesh = "bd" +public const val KeyBarbados = "bb" +public const val KeyBelarus = "by" +public const val KeyBelgium = "be" +public const val KeyBelize = "bz" +public const val KeyBenin = "bj" +public const val KeyBermuda = "bm" +public const val KeyBhutan = "bt" +public const val KeyBolivia = "bo" +public const val KeyCaribbeanNetherlands = "bq" +public const val KeyBosniaAndHerzegovina = "ba" +public const val KeyBotswana = "bw" +public const val KeyBouvetIsland = "bv" +public const val KeyBrazil = "br" +public const val KeyBritishIndianOceanTerritory = "io" +public const val KeyBruneiDarussalam = "bn" +public const val KeyBulgaria = "bg" +public const val KeyBurkinaFaso = "bf" +public const val KeyBurundi = "bi" +public const val KeyCaboVerde = "cv" +public const val KeyCambodia = "kh" +public const val KeyCameroon = "cm" +public const val KeyCanada = "ca" +public const val KeyCaymanIslands = "ky" +public const val KeyCentralAfricanRepublic = "cf" +public const val KeyChad = "td" +public const val KeyChile = "cl" +public const val KeyChina = "cn" +public const val KeyChristmasIsland = "cx" +public const val KeyCocosIslands = "cc" +public const val KeyColombia = "co" +public const val KeyComoros = "km" +public const val KeyRepublicOfTheCongo = "cg" +public const val KeyDemocraticRepublicOfTheCongo = "cd" +public const val KeyCookIslands = "ck" +public const val KeyCostaRica = "cr" +public const val KeyIvoryCoast = "ci" +public const val KeyCroatia = "hr" +public const val KeyCuba = "cu" +public const val KeyCuracao = "cw" +public const val KeyCyprus = "cy" +public const val KeyCzechRepublic = "cz" +public const val KeyDenmark = "dk" +public const val KeyDjibouti = "dj" +public const val KeyDominica = "dm" +public const val KeyDominicanRepublic = "do" +public const val KeyEcuador = "ec" +public const val KeyEgypt = "eg" +public const val KeyElSalvador = "sv" +public const val KeyEquatorialGuinea = "gq" +public const val KeyEritrea = "er" +public const val KeyEstonia = "ee" +public const val KeyEswatini = "sz" +public const val KeyEthiopia = "et" +public const val KeyFalklandIslands = "fk" +public const val KeyFaroeIslands = "fo" +public const val KeyFiji = "fj" +public const val KeyFinland = "fi" +public const val KeyFrance = "fr" +public const val KeyFrenchGuiana = "gf" +public const val KeyFrenchPolynesia = "pf" +public const val KeyFrenchSouthernAndAntarcticLands = "tf" +public const val KeyGabon = "ga" +public const val KeyGambia = "gm" +public const val KeyGeorgia = "ge" +public const val KeyGermany = "de" +public const val KeyGhana = "gh" +public const val KeyGibraltar = "gi" +public const val KeyGreece = "gr" +public const val KeyGreenland = "gl" +public const val KeyGrenada = "gd" +public const val KeyGuadeloupe = "gp" +public const val KeyGuam = "gu" +public const val KeyGuatemala = "gt" +public const val KeyBailiwickOfGuernsey = "gg" +public const val KeyGuinea = "gn" +public const val KeyGuineaBissau = "gw" +public const val KeyGuyana = "gy" +public const val KeyHaiti = "ht" +public const val KeyHeardIslandAndMcDonaldIslands = "hm" +public const val KeyVaticanCity = "va" +public const val KeyHonduras = "hn" +public const val KeyHongKong = "hk" +public const val KeyHungary = "hu" +public const val KeyIceland = "is" +public const val KeyIndia = "in" +public const val KeyIndonesia = "id" +public const val KeyIran = "ir" +public const val KeyIraq = "iq" +public const val KeyIreland = "ie" +public const val KeyIsleOfMan = "im" +public const val KeyIsrael = "il" +public const val KeyItaly = "it" +public const val KeyJamaica = "jm" +public const val KeyJapan = "jp" +public const val KeyJersey = "je" +public const val KeyJordan = "jo" +public const val KeyKazakhstan = "kz" +public const val KeyKenya = "ke" +public const val KeyKiribati = "ki" +public const val KeyNorthKorea = "kp" +public const val KeySouthKorea = "kr" +public const val KeyKuwait = "kw" +public const val KeyKyrgyzstan = "kg" +public const val KeyLaos = "la" +public const val KeyLatvia = "lv" +public const val KeyLebanon = "lb" +public const val KeyLesotho = "ls" +public const val KeyLiberia = "lr" +public const val KeyLibya = "ly" +public const val KeyLiechtenstein = "li" +public const val KeyLithuania = "lt" +public const val KeyLuxembourg = "lu" +public const val KeyMacau = "mo" +public const val KeyMadagascar = "mg" +public const val KeyMalawi = "mw" +public const val KeyMalaysia = "my" +public const val KeyMaldives = "mv" +public const val KeyMali = "ml" +public const val KeyMalta = "mt" +public const val KeyMarshallIslands = "mh" +public const val KeyMartinique = "mq" +public const val KeyMauritania = "mr" +public const val KeyMauritius = "mu" +public const val KeyMayotte = "yt" +public const val KeyMexico = "mx" +public const val KeyMicronesia = "fm" +public const val KeyMoldova = "md" +public const val KeyMonaco = "mc" +public const val KeyMongolia = "mn" +public const val KeyMontenegro = "me" +public const val KeyMontserrat = "ms" +public const val KeyMorocco = "ma" +public const val KeyMozambique = "mz" +public const val KeyMyanmar = "mm" +public const val KeyNamibia = "na" +public const val KeyNauru = "nr" +public const val KeyNepal = "np" +public const val KeyNetherlands = "nl" +public const val KeyNewCaledonia = "nc" +public const val KeyNewZealand = "nz" +public const val KeyNicaragua = "ni" +public const val KeyNiger = "ne" +public const val KeyNigeria = "ng" +public const val KeyNiue = "nu" +public const val KeyNorfolkIsland = "nf" +public const val KeyNorthMacedonia = "mk" +public const val KeyNorthernMarianaIslands = "mp" +public const val KeyNorway = "no" +public const val KeyOman = "om" +public const val KeyPakistan = "pk" +public const val KeyPalau = "pw" +public const val KeyPalestine = "ps" +public const val KeyPanama = "pa" +public const val KeyPapuaNewGuinea = "pg" +public const val KeyParaguay = "py" +public const val KeyPeru = "pe" +public const val KeyPhilippines = "ph" +public const val KeyPitcairnIslands = "pn" +public const val KeyPoland = "pl" +public const val KeyPortugal = "pt" +public const val KeyPuertoRico = "pr" +public const val KeyQatar = "qa" +public const val KeyReunion = "re" +public const val KeyRomania = "ro" +public const val KeyRussia = "ru" +public const val KeyRwanda = "rw" +public const val KeySaintBarthelemy = "bl" +public const val KeySaintHelena = "sh" +public const val KeySaintKittsAndNevis = "kn" +public const val KeySaintLucia = "lc" +public const val KeySaintMartin = "mf" +public const val KeySaintPierreAndMiquelon = "pm" +public const val KeySaintVincentAndTheGrenadines = "vc" +public const val KeySamoa = "ws" +public const val KeySanMarino = "sm" +public const val KeySaoTomeAndPrincipe = "st" +public const val KeySaudiArabia = "sa" +public const val KeySenegal = "sn" +public const val KeySerbia = "rs" +public const val KeySeychelles = "sc" +public const val KeySierraLeone = "sl" +public const val KeySingapore = "sg" +public const val KeySintMaarten = "sx" +public const val KeySlovakia = "sk" +public const val KeySlovenia = "si" +public const val KeySolomonIslands = "sb" +public const val KeySomalia = "so" +public const val KeySouthAfrica = "za" +public const val KeySouthGeorgiaAndTheSouthSandwichIslands = "gs" +public const val KeySouthSudan = "ss" +public const val KeySpain = "es" +public const val KeySriLanka = "lk" +public const val KeySudan = "sd" +public const val KeySuriname = "sr" +public const val KeySvalbardAndJanMayen = "sj" +public const val KeySweden = "se" +public const val KeySwitzerland = "ch" +public const val KeySyria = "sy" +public const val KeyTaiwan = "tw" +public const val KeyTajikistan = "tj" +public const val KeyTanzania = "tz" +public const val KeyThailand = "th" +public const val KeyTimorLeste = "tl" +public const val KeyTogo = "tg" +public const val KeyTokelau = "tk" +public const val KeyTonga = "to" +public const val KeyTrinidadAndTobago = "tt" +public const val KeyTunisia = "tn" +public const val KeyTurkey = "tr" +public const val KeyTurkmenistan = "tm" +public const val KeyTurksAndCaicosIslands = "tc" +public const val KeyTuvalu = "tv" +public const val KeyUganda = "ug" +public const val KeyUkraine = "ua" +public const val KeyUnitedArabEmirates = "ae" +public const val KeyUnitedKingdom = "gb" +public const val KeyUnitedStates = "us" +public const val KeyUnitedStatesMinorOutlyingIslands = "um" +public const val KeyUruguay = "uy" +public const val KeyUzbekistan = "uz" +public const val KeyVanuatu = "vu" +public const val KeyVenezuela = "ve" +public const val KeyVietnam = "vn" +public const val KeyVirginIslandsGB = "vg" +public const val KeyVirginIslandsUS = "vi" +public const val KeyWallisAndFutuna = "wf" +public const val KeyWesternSahara = "eh" +public const val KeyYemen = "ye" +public const val KeyZambia = "zm" +public const val KeyZimbabwe = "zw" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerClientDate.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerClientDate.kt index cc89a8623..466a55989 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerClientDate.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerClientDate.kt @@ -9,7 +9,7 @@ import kotlinx.serialization.json.content import kotlinx.serialization.json.longOrNull -internal object KSerializerClientDate : KSerializer { +public object KSerializerClientDate : KSerializer { private val serializer = StringSerializer diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetList.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetList.kt index 5775d795e..e81955960 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetList.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetList.kt @@ -9,7 +9,7 @@ import kotlinx.serialization.json.json import kotlinx.serialization.json.jsonArray -object KSerializerFacetList : KSerializer> { +public object KSerializerFacetList : KSerializer> { override val descriptor = ArrayListClassDesc(Facet.serializer().descriptor) diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetMap.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetMap.kt index a4aca963b..920c6e10d 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetMap.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerFacetMap.kt @@ -12,7 +12,7 @@ import kotlinx.serialization.internal.IntSerializer import kotlinx.serialization.internal.StringSerializer -internal object KSerializerFacetMap : KSerializer>> { +public object KSerializerFacetMap : KSerializer>> { override val descriptor = HashMapClassDesc( Attribute.descriptor, diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoint.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoint.kt new file mode 100644 index 000000000..59efe5d9c --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoint.kt @@ -0,0 +1,32 @@ +package com.algolia.search.serialize + +import com.algolia.search.model.search.Point +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.internal.SerialClassDescImpl +import kotlinx.serialization.json.json + + +public object KSerializerGeoPoint : KSerializer { + + override val descriptor = SerialClassDescImpl("point") + + override fun serialize(encoder: Encoder, obj: Point) { + val json = json { + KeyLat to obj.latitude + KeyLng to obj.longitude + } + + encoder.asJsonOutput().encodeJson(json) + } + + override fun deserialize(decoder: Decoder): Point { + val json = decoder.asJsonInput().jsonObject + + return Point( + latitude = json.getPrimitive(KeyLat).float, + longitude = json.getPrimitive(KeyLng).float + ) + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoints.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoints.kt new file mode 100644 index 000000000..ccfd3a7f6 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerGeoPoints.kt @@ -0,0 +1,31 @@ +package com.algolia.search.serialize + +import com.algolia.search.model.search.Point +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.internal.SerialClassDescImpl +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.list + + +public object KSerializerGeoPoints : KSerializer> { + + override val descriptor = SerialClassDescImpl("point") + + override fun serialize(encoder: Encoder, obj: List) { + val json = jsonArray { + obj.forEach { +Json.toJson(KSerializerGeoPoint, it) } + } + + encoder.asJsonOutput().encodeJson(json) + } + + override fun deserialize(decoder: Decoder): List { + return when (val json = decoder.asJsonInput()) { + is JsonArray -> Json.fromJson(KSerializerGeoPoint.list, json) + else -> listOf(Json.fromJson(KSerializerGeoPoint, json)) + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerObjectIDs.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerObjectIDs.kt index 3a311d63b..b3949c1b0 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerObjectIDs.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerObjectIDs.kt @@ -10,7 +10,7 @@ import kotlinx.serialization.json.json import kotlinx.serialization.json.jsonArray -internal object KSerializerObjectIDs : KSerializer> { +public object KSerializerObjectIDs : KSerializer> { override val descriptor = ArrayListClassDesc(ObjectID.descriptor) diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerPoint.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerPoint.kt index 2380606d8..7220a95ec 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerPoint.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerPoint.kt @@ -8,7 +8,7 @@ import kotlinx.serialization.KSerializer import kotlinx.serialization.internal.StringSerializer -internal object KSerializerPoint : KSerializer { +public object KSerializerPoint : KSerializer { private val serializer = StringSerializer diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerVariant.kt b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerVariant.kt index 0b728cc36..fa1079e0f 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerVariant.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/KSerializerVariant.kt @@ -10,7 +10,7 @@ import kotlinx.serialization.internal.SerialClassDescImpl import kotlinx.serialization.json.json -internal object KSerializerVariant : KSerializer { +public object KSerializerVariant : KSerializer { override val descriptor = SerialClassDescImpl("variant") diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/Keys.kt b/src/commonMain/kotlin/com/algolia/search/serialize/Keys.kt index c5ab87d8f..f85e770d2 100644 --- a/src/commonMain/kotlin/com/algolia/search/serialize/Keys.kt +++ b/src/commonMain/kotlin/com/algolia/search/serialize/Keys.kt @@ -330,71 +330,34 @@ public const val KeyExactPhrase = "exactPhrase" public const val KeyExcludeWords = "excludeWords" public const val KeyAdvancedSyntaxFeatures = "advancedSyntaxFeatures" public const val KeyPersonalizationImpact = "personalizationImpact" - -public const val KeyAfrikaans = "af" -public const val KeyArabic = "ar" -public const val KeyAzeri = "az" -public const val KeyBulgarian = "bg" -public const val KeyBrunei = "bn" -public const val KeyCatalan = "ca" -public const val KeyCzech = "cs" -public const val KeyWelsh = "cy" -public const val KeyDanish = "da" -public const val KeyGerman = "de" -public const val KeyEnglish = "en" -public const val KeyEsperanto = "eo" -public const val KeySpanish = "es" -public const val KeyEstonian = "et" -public const val KeyBasque = "eu" -public const val KeyFinnish = "fi" -public const val KeyFaroese = "fo" -public const val KeyFrench = "fr" -public const val KeyGalician = "gl" -public const val KeyHebrew = "he" -public const val KeyHindi = "hi" -public const val KeyHungarian = "hu" -public const val KeyArmenian = "hy" -public const val KeyIndonesian = "id" -public const val KeyIcelandic = "is" -public const val KeyItalian = "it" -public const val KeyJapanese = "ja" -public const val KeyGeorgian = "ka" -public const val KeyKazakh = "kk" -public const val KeyKorean = "ko" -public const val KeyKyrgyz = "ky" -public const val KeyLithuanian = "lt" -public const val KeyMaori = "mi" -public const val KeyMongolian = "mn" -public const val KeyMarathi = "mr" -public const val KeyMalay = "ms" -public const val KeyMaltese = "mt" -public const val KeyNorwegian = "nb" -public const val KeyDutch = "nl" -public const val KeyNorthernSotho = "ns" -public const val KeyPolish = "pl" -public const val KeyPashto = "ps" -public const val KeyPortuguese = "pt" -public const val KeyQuechua = "qu" -public const val KeyRomanian = "ro" -public const val KeyRussian = "ru" -public const val KeySlovak = "sk" -public const val KeyAlbanian = "sq" -public const val KeySwedish = "sv" -public const val KeySwahili = "sw" -public const val KeyTamil = "ta" -public const val KeyTelugu = "te" -public const val KeyTagalog = "tl" -public const val KeyTswana = "tn" -public const val KeyTurkish = "tr" -public const val KeyTatar = "tt" - -public const val RouteIndexesV1 = "1/indexes" -public const val RouteSettings = "settings" -public const val RouteClustersV1 = "1/clusters" -public const val RouteSynonyms = "synonyms" -public const val RouteEventsV1 = "1/events" -public const val RouteABTestsV2 = "2/abtests" -public const val RouteRules = "rules" -public const val RouteKeysV1 = "1/keys" -public const val RouteLogs = "1/logs" -public const val RouteRecommendation = "1/recommendation" +public const val KeyLanguage = "language" +public const val KeyCountries = "countries" +public const val KeyCity = "city" +public const val KeyCountry = "country" +public const val KeyAddress = "address" +public const val KeyBusStop = "busStop" +public const val KeyTrainStation = "trainStation" +public const val KeyTownhall = "townhall" +public const val KeyAirport = "airport" +public const val KeyLocaleNames = "locale_names" +public const val KeyCounty = "county" +public const val KeyAdministrative = "administrative" +public const val KeyCountryCode = "country_code" +public const val KeyPostCode = "postcode" +public const val KeyPopulation = "population" +public const val Key_Geoloc = "_geoloc" +public const val KeyIs_Country = "is_country" +public const val KeyIs_City = "is_city" +public const val KeyIs_Popular = "is_popular" +public const val KeyIs_Suburb = "is_suburb" +public const val KeyIs_Highway = "is_highway" +public const val KeyImportance = "importance" +public const val Key_Tags = "_tags" +public const val KeyAdmin_Level = "admin_level" +public const val KeyDistrict = "district" +public const val KeyDegradedQuery = "degradedQuery" +public const val KeyGeoPoint = "geoPoint" +public const val KeySuburb = "suburb" +public const val KeyVillage = "village" +public const val KeySimilarQuery = "similarQuery" +public const val KeyEnableABTest = "enableABTest" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/Languages.kt b/src/commonMain/kotlin/com/algolia/search/serialize/Languages.kt new file mode 100644 index 000000000..43f4c4224 --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/serialize/Languages.kt @@ -0,0 +1,59 @@ +package com.algolia.search.serialize + + +public const val KeyAfrikaans = "af" +public const val KeyArabic = "ar" +public const val KeyAzeri = "az" +public const val KeyBulgarian = "bg" +public const val KeyBrunei = "bn" +public const val KeyCatalan = "ca" +public const val KeyCzech = "cs" +public const val KeyWelsh = "cy" +public const val KeyDanish = "da" +public const val KeyGerman = "de" +public const val KeyEnglish = "en" +public const val KeyEsperanto = "eo" +public const val KeySpanish = "es" +public const val KeyEstonian = "et" +public const val KeyBasque = "eu" +public const val KeyFinnish = "fi" +public const val KeyFaroese = "fo" +public const val KeyFrench = "fr" +public const val KeyGalician = "gl" +public const val KeyHebrew = "he" +public const val KeyHindi = "hi" +public const val KeyHungarian = "hu" +public const val KeyArmenian = "hy" +public const val KeyIndonesian = "id" +public const val KeyIcelandic = "is" +public const val KeyItalian = "it" +public const val KeyJapanese = "ja" +public const val KeyGeorgian = "ka" +public const val KeyKazakh = "kk" +public const val KeyKorean = "ko" +public const val KeyKyrgyz = "ky" +public const val KeyLithuanian = "lt" +public const val KeyMaori = "mi" +public const val KeyMongolian = "mn" +public const val KeyMarathi = "mr" +public const val KeyMalay = "ms" +public const val KeyMaltese = "mt" +public const val KeyNorwegian = "nb" +public const val KeyDutch = "nl" +public const val KeyNorthernSotho = "ns" +public const val KeyPolish = "pl" +public const val KeyPashto = "ps" +public const val KeyPortuguese = "pt" +public const val KeyQuechua = "qu" +public const val KeyRomanian = "ro" +public const val KeyRussian = "ru" +public const val KeySlovak = "sk" +public const val KeyAlbanian = "sq" +public const val KeySwedish = "sv" +public const val KeySwahili = "sw" +public const val KeyTamil = "ta" +public const val KeyTelugu = "te" +public const val KeyTagalog = "tl" +public const val KeyTswana = "tn" +public const val KeyTurkish = "tr" +public const val KeyTatar = "tt" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/serialize/Routes.kt b/src/commonMain/kotlin/com/algolia/search/serialize/Routes.kt new file mode 100644 index 000000000..961cb6cfe --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/serialize/Routes.kt @@ -0,0 +1,14 @@ +package com.algolia.search.serialize + + +public const val RouteIndexesV1 = "1/indexes" +public const val RouteSettings = "settings" +public const val RouteClustersV1 = "1/clusters" +public const val RouteSynonyms = "synonyms" +public const val RouteEventsV1 = "1/events" +public const val RouteABTestsV2 = "2/abtests" +public const val RouteRules = "rules" +public const val RouteKeysV1 = "1/keys" +public const val RouteLogs = "1/logs" +public const val RouteRecommendation = "1/recommendation" +public const val RoutePlaces = "1/places" \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/transport/Gzip.kt b/src/commonMain/kotlin/com/algolia/search/transport/Gzip.kt new file mode 100644 index 000000000..422b107ac --- /dev/null +++ b/src/commonMain/kotlin/com/algolia/search/transport/Gzip.kt @@ -0,0 +1,4 @@ +package com.algolia.search.transport + + +internal expect object Gzip : (String) -> ByteArray \ No newline at end of file diff --git a/src/commonMain/kotlin/com/algolia/search/transport/Host.kt b/src/commonMain/kotlin/com/algolia/search/transport/Host.kt index 58ca909c7..ddb6a7d50 100644 --- a/src/commonMain/kotlin/com/algolia/search/transport/Host.kt +++ b/src/commonMain/kotlin/com/algolia/search/transport/Host.kt @@ -15,8 +15,14 @@ internal val ApplicationID.searchHosts RetryableHost("$this-3.algolianet.com") ) -internal val insightHost = RetryableHost("insights.algolia.io") -internal val analyticsHost = RetryableHost("analytics.algolia.com") +internal val insightHosts = listOf(RetryableHost("insights.algolia.io")) +internal val analyticsHosts = listOf(RetryableHost("analytics.algolia.com")) +internal val placesHosts = listOf( + RetryableHost("places-dsn.algolia.net"), + RetryableHost("places-1.algolianet.com"), + RetryableHost("places-2.algolianet.com"), + RetryableHost("places-3.algolianet.com") +) internal fun RetryableHost.reset() { lastUpdated = Time.getCurrentTimeMillis() diff --git a/src/commonMain/kotlin/com/algolia/search/transport/HttpRequestBuilder.kt b/src/commonMain/kotlin/com/algolia/search/transport/HttpRequestBuilder.kt index ba2af8c40..7f9c32af8 100644 --- a/src/commonMain/kotlin/com/algolia/search/transport/HttpRequestBuilder.kt +++ b/src/commonMain/kotlin/com/algolia/search/transport/HttpRequestBuilder.kt @@ -9,12 +9,12 @@ import io.ktor.client.request.header import io.ktor.client.request.parameter -internal fun HttpRequestBuilder.setApplicationId(applicationID: ApplicationID) { - header(KeyAlgoliaApplicationID, applicationID.raw) +internal fun HttpRequestBuilder.setApplicationId(applicationID: ApplicationID?) { + header(KeyAlgoliaApplicationID, applicationID?.raw) } -internal fun HttpRequestBuilder.setApiKey(apiKey: APIKey) { - header(KeyAlgoliaAPIKey, apiKey.raw) +internal fun HttpRequestBuilder.setApiKey(apiKey: APIKey?) { + header(KeyAlgoliaAPIKey, apiKey?.raw) } internal fun HttpRequestBuilder.setRequestOptions(requestOptions: RequestOptions?) { diff --git a/src/commonMain/kotlin/com/algolia/search/transport/Transport.kt b/src/commonMain/kotlin/com/algolia/search/transport/Transport.kt index 51be6c439..515c65394 100644 --- a/src/commonMain/kotlin/com/algolia/search/transport/Transport.kt +++ b/src/commonMain/kotlin/com/algolia/search/transport/Transport.kt @@ -1,13 +1,12 @@ package com.algolia.search.transport -import com.algolia.search.configuration.CallType -import com.algolia.search.configuration.Configuration -import com.algolia.search.configuration.RetryableHost +import com.algolia.search.configuration.* import io.ktor.client.features.ResponseException import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.request import io.ktor.http.HttpMethod import io.ktor.http.URLProtocol +import io.ktor.util.KtorExperimentalAPI import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -17,12 +16,15 @@ import kotlin.math.floor internal class Transport( - configuration: Configuration + configuration: Configuration, + private val credentialsOrNull: Credentials? ) : Configuration by configuration { private val hostStatusExpirationDelayMS: Long = 1000L * 60L * 5L private val mutex = Mutex() + val credentials get() = credentialsOrNull!! + suspend fun callableHosts(callType: CallType): List { return mutex.withLock { hosts.expireHostsOlderThan(hostStatusExpirationDelayMS) @@ -45,13 +47,24 @@ internal class Transport( url.path(path) url.protocol = URLProtocol.HTTPS method = httpMethod - body?.let { this.body = it } - setApplicationId(applicationID) - setApiKey(apiKey) + compress(body) + credentialsOrNull?.let { + setApplicationId(it.applicationID) + setApiKey(it.apiKey) + } setRequestOptions(requestOptions) } } + private fun HttpRequestBuilder.compress(payload: String?) { + if (payload != null) { + body = when (compression) { + Compression.Gzip -> Gzip(payload) + Compression.None -> payload + } + } + } + suspend inline fun request( httpMethod: HttpMethod, callType: CallType, diff --git a/src/commonTest/kotlin/Expected.kt b/src/commonTest/kotlin/Expected.kt index 30f2be5ae..ee70d13ec 100644 --- a/src/commonTest/kotlin/Expected.kt +++ b/src/commonTest/kotlin/Expected.kt @@ -1,5 +1,6 @@ import com.algolia.search.client.ClientAnalytics import com.algolia.search.client.ClientInsights +import com.algolia.search.client.ClientPlaces import com.algolia.search.client.ClientSearch import kotlinx.coroutines.CoroutineScope import kotlin.coroutines.CoroutineContext @@ -11,6 +12,7 @@ internal expect val clientAdmin2: ClientSearch internal expect val clientMcm: ClientSearch internal expect val clientAnalytics: ClientAnalytics internal expect val clientInsights: ClientInsights +internal expect val clientPlaces : ClientPlaces internal expect fun runBlocking( coroutineContext: CoroutineContext = EmptyCoroutineContext, diff --git a/src/commonTest/kotlin/client/TestClient.kt b/src/commonTest/kotlin/client/TestClient.kt deleted file mode 100644 index 17534cee4..000000000 --- a/src/commonTest/kotlin/client/TestClient.kt +++ /dev/null @@ -1,53 +0,0 @@ -package client - -import com.algolia.search.client.ClientAnalytics -import com.algolia.search.client.ClientInsights -import com.algolia.search.client.ClientSearch -import com.algolia.search.configuration.* -import com.algolia.search.helper.toAPIKey -import com.algolia.search.helper.toApplicationID -import io.ktor.client.engine.mock.MockEngine -import io.ktor.client.engine.mock.respondOk -import shouldEqual -import kotlin.test.Test - - -internal class TestClient { - - private val apiKey = "apiKey".toAPIKey() - private val appID = "appID".toApplicationID() - private val hosts = listOf(RetryableHost("host")) - - private val engine = MockEngine { respondOk() } - private val configurationSearch = ConfigurationSearch(appID, apiKey, engine = engine, hosts = hosts) - private val configurationInsights = ConfigurationInsights(appID, apiKey, engine = engine, hosts = hosts) - private val configurationAnalytics = ConfigurationAnalytics(appID, apiKey, engine = engine, hosts = hosts) - - @Test - fun search() { - ClientSearch(configurationSearch) shouldEqual configurationSearch - } - - @Test - fun insights() { - ClientInsights(configurationInsights) shouldEqual configurationInsights - ClientInsights(configurationInsights) shouldEqual configurationInsights - } - - @Test - fun analytics() { - ClientAnalytics(configurationAnalytics) shouldEqual configurationAnalytics - ClientAnalytics(configurationAnalytics) shouldEqual configurationAnalytics - } - - private infix fun Configuration.shouldEqual(expected: Configuration) { - expected.let { - apiKey shouldEqual it.apiKey - applicationID shouldEqual it.applicationID - hosts shouldEqual it.hosts - logLevel shouldEqual it.logLevel - readTimeout shouldEqual it.readTimeout - writeTimeout shouldEqual it.writeTimeout - } - } -} \ No newline at end of file diff --git a/src/commonTest/kotlin/configuration/TestConfiguration.kt b/src/commonTest/kotlin/configuration/TestConfiguration.kt new file mode 100644 index 000000000..b17eae78f --- /dev/null +++ b/src/commonTest/kotlin/configuration/TestConfiguration.kt @@ -0,0 +1,78 @@ +package configuration + +import BuildConfig +import com.algolia.search.configuration.* +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID +import com.algolia.search.transport.analyticsHosts +import com.algolia.search.transport.insightHosts +import com.algolia.search.transport.placesHosts +import com.algolia.search.transport.searchHosts +import io.ktor.client.features.logging.LogLevel +import shouldBeNull +import shouldEqual +import kotlin.test.Test + + +internal class TestConfiguration { + + private val applicationID = ApplicationID("applicationID") + private val apiKey = APIKey("apiKey") + + @Test + fun testAlgoliaSearchClient() { + AlgoliaSearchClient.version shouldEqual BuildConfig.version + } + + @Test + fun configurationSearch() { + ConfigurationSearch(applicationID, apiKey).apply { + writeTimeout shouldEqual defaultWriteTimeout + readTimeout shouldEqual defaultReadTimeout + logLevel shouldEqual LogLevel.NONE + hosts shouldEqual applicationID.searchHosts + defaultHeaders.shouldBeNull() + engine.shouldBeNull() + httpClientConfig.shouldBeNull() + } + } + + @Test + fun configurationAnalytics() { + ConfigurationAnalytics(applicationID, apiKey).apply { + writeTimeout shouldEqual defaultWriteTimeout + readTimeout shouldEqual defaultReadTimeout + logLevel shouldEqual LogLevel.NONE + hosts shouldEqual analyticsHosts + defaultHeaders.shouldBeNull() + engine.shouldBeNull() + httpClientConfig.shouldBeNull() + } + } + + @Test + fun configurationInsights() { + ConfigurationInsights(applicationID, apiKey).apply { + writeTimeout shouldEqual defaultWriteTimeout + readTimeout shouldEqual defaultReadTimeout + logLevel shouldEqual LogLevel.NONE + hosts shouldEqual insightHosts + defaultHeaders.shouldBeNull() + engine.shouldBeNull() + httpClientConfig.shouldBeNull() + } + } + + @Test + fun configurationPlaces() { + ConfigurationPlaces().apply { + writeTimeout shouldEqual defaultWriteTimeout + readTimeout shouldEqual defaultReadTimeout + logLevel shouldEqual LogLevel.NONE + hosts shouldEqual placesHosts + defaultHeaders.shouldBeNull() + engine.shouldBeNull() + httpClientConfig.shouldBeNull() + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/configuration/TestUserAgent.kt b/src/commonTest/kotlin/configuration/TestUserAgent.kt new file mode 100644 index 000000000..90c761393 --- /dev/null +++ b/src/commonTest/kotlin/configuration/TestUserAgent.kt @@ -0,0 +1,79 @@ +package configuration + +import BuildConfig +import com.algolia.search.client.ClientSearch +import com.algolia.search.configuration.AlgoliaSearchClient +import com.algolia.search.configuration.ConfigurationSearch +import com.algolia.search.configuration.clientUserAgent +import com.algolia.search.dsl.requestOptions +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respondBadRequest +import io.ktor.client.engine.mock.respondOk +import io.ktor.client.features.ResponseException +import io.ktor.client.features.UserAgent +import io.ktor.client.request.HttpRequestBuilder +import runBlocking +import shouldBeTrue +import shouldEqual +import shouldFailWith +import kotlin.test.Test + + +internal class TestUserAgent { + + private val applicationID = ApplicationID("applicationID") + private val apiKey = APIKey("apiKey") + private val userAgentKey = "User-Agent" + + @Test + fun testUserAgent() { + val version = AlgoliaSearchClient.version + + clientUserAgent(version) shouldEqual "Algolia for Kotlin ($version)" + } + + @Test + fun overridingUserAgentInConfigurationShouldBeIgnored() { + runBlocking { + val configuration = ConfigurationSearch( + applicationID = applicationID, + engine = MockEngine { respondOk() }, + apiKey = apiKey, + httpClientConfig = { + install(UserAgent) { + agent = "Test" + } + }) + val client = ClientSearch(configuration) + val request = client.httpClient.execute(HttpRequestBuilder()) + val headers = request.response.call.request.headers + + headers.contains(userAgentKey).shouldBeTrue() + headers[userAgentKey] shouldEqual clientUserAgent(BuildConfig.version) + } + } + + @Test + fun overridingUserAgentInRequestOptionsShouldNotBeIgnored() { + runBlocking { + val expected = "My User Agent" + val configuration = ConfigurationSearch( + applicationID = applicationID, + engine = MockEngine { + respondBadRequest() + }, + apiKey = apiKey + ) + val client = ClientSearch(configuration) + val requestOptions = requestOptions { header(userAgentKey, expected) } + val request = shouldFailWith { + client.listIndices(requestOptions) + } + val headers = request.response.call.request.headers + + headers[userAgentKey] shouldEqual expected + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/documentation/methods/analytics/DocAddABTest.kt b/src/commonTest/kotlin/documentation/methods/analytics/DocAddABTest.kt index 9b553973c..069d8aeea 100644 --- a/src/commonTest/kotlin/documentation/methods/analytics/DocAddABTest.kt +++ b/src/commonTest/kotlin/documentation/methods/analytics/DocAddABTest.kt @@ -2,13 +2,13 @@ package documentation.methods.analytics import clientAnalytics import com.algolia.search.model.ClientDate +import com.algolia.search.model.IndexName import com.algolia.search.model.Time import com.algolia.search.model.analytics.ABTest import com.algolia.search.model.analytics.Variant import com.algolia.search.model.search.IgnorePlurals import com.algolia.search.model.search.Query import runBlocking -import suite.testSuiteIndexName import kotlin.test.Ignore import kotlin.test.Test @@ -21,10 +21,8 @@ internal class DocAddABTest { // requestOptions: __RequestOptions?__ = null // ): CreationABTest - private val suffix = "snippet" - private val indexName = testSuiteIndexName(suffix) - private val indexName1 = indexName - private val indexName2 = indexName.copy(indexName.raw + "_copy") + private val indexName1 = IndexName("index1") + private val indexName2 = IndexName("index2") @Test fun snippet1() { diff --git a/src/commonTest/kotlin/documentation/methods/indices/DocIndexExists.kt b/src/commonTest/kotlin/documentation/methods/indices/DocIndexExists.kt new file mode 100644 index 000000000..705593897 --- /dev/null +++ b/src/commonTest/kotlin/documentation/methods/indices/DocIndexExists.kt @@ -0,0 +1,20 @@ +package documentation.methods.indices + +import documentation.index +import runBlocking +import kotlin.test.Ignore +import kotlin.test.Test + + +@Ignore +internal class DocIndexExists { + + // suspend fun Index.exists(): Boolean + + @Test + fun snippet1() { + runBlocking { + index.exists() + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/documentation/parameters/languages/DocIgnorePlurals.kt b/src/commonTest/kotlin/documentation/parameters/languages/DocIgnorePlurals.kt index 45b1bddca..f79bd7ce9 100644 --- a/src/commonTest/kotlin/documentation/parameters/languages/DocIgnorePlurals.kt +++ b/src/commonTest/kotlin/documentation/parameters/languages/DocIgnorePlurals.kt @@ -4,7 +4,7 @@ import com.algolia.search.dsl.query import com.algolia.search.dsl.queryLanguages import com.algolia.search.dsl.settings import com.algolia.search.model.search.IgnorePlurals -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import documentation.index import runBlocking import kotlin.test.Ignore @@ -35,8 +35,8 @@ internal class DocIgnorePlurals { runBlocking { val query = query("query") { ignorePlurals = IgnorePlurals.QueryLanguages( - QueryLanguage.Spanish, - QueryLanguage.Catalan + Language.Spanish, + Language.Catalan ) } diff --git a/src/commonTest/kotlin/documentation/parameters/languages/DocRemoveStopWords.kt b/src/commonTest/kotlin/documentation/parameters/languages/DocRemoveStopWords.kt index 9fa23bf91..de9093990 100644 --- a/src/commonTest/kotlin/documentation/parameters/languages/DocRemoveStopWords.kt +++ b/src/commonTest/kotlin/documentation/parameters/languages/DocRemoveStopWords.kt @@ -3,7 +3,7 @@ package documentation.parameters.languages import com.algolia.search.dsl.query import com.algolia.search.dsl.queryLanguages import com.algolia.search.dsl.settings -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import com.algolia.search.model.search.RemoveStopWords import documentation.index import runBlocking @@ -34,7 +34,7 @@ internal class DocRemoveStopWords { fun snippet2() { runBlocking { val query = query("query") { - removeStopWords = RemoveStopWords.QueryLanguages(QueryLanguage.English) + removeStopWords = RemoveStopWords.QueryLanguages(Language.English) } index.search(query) diff --git a/src/commonTest/kotlin/documentation/reference/DocPlaces.kt b/src/commonTest/kotlin/documentation/reference/DocPlaces.kt new file mode 100644 index 000000000..65fd72621 --- /dev/null +++ b/src/commonTest/kotlin/documentation/reference/DocPlaces.kt @@ -0,0 +1,100 @@ +package documentation.reference + +import clientPlaces +import com.algolia.search.client.ClientPlaces +import com.algolia.search.dsl.countries +import com.algolia.search.dsl.placesQuery +import com.algolia.search.model.APIKey +import com.algolia.search.model.ApplicationID +import com.algolia.search.model.ObjectID +import com.algolia.search.model.places.PlacesQuery +import com.algolia.search.model.search.Language +import com.algolia.search.model.search.Point +import runBlocking +import kotlin.test.Ignore +import kotlin.test.Test + + +@Ignore +internal class DocPlaces { + + private val client = ClientPlaces() + + @Test + fun unauthenticated() { + runBlocking { + ClientPlaces() + } + } + + @Suppress("UNUSED_VARIABLE") + @Test + fun authenticated() { + runBlocking { + val client = ClientPlaces( + ApplicationID("YourApplicationID"), + APIKey("YourPlacesAPIKey") + ) + } + } + + @Test + fun multipleLanguage() { + runBlocking { + val response = client.searchPlaces(PlacesQuery("Paris")) + + response.hits.first().city.getValue(Language.English) + } + } + + @Test + fun oneLanguage() { + runBlocking { + val response = client.searchPlaces( + query = PlacesQuery("New-York"), + language = Language.English + ) + + response.hits.first().city + } + } + + @Test + fun multipleCountries() { + runBlocking { + val query = placesQuery("York") { + countries { + +UnitedKingdom + +UnitedStates + } + } + + client.searchPlaces(query) + } + } + + @Test + fun aroundLatLng() { + runBlocking { + val query = placesQuery { + aroundLatLng = Point(40.7128f, -74.0060f) // New-York + } + + client.searchPlaces(query) + } + } + + @Test + fun reverseGeoCoding() { + runBlocking { + client.reverseGeocoding(Point(40.7128f, -74.0060f)) // New-York + } + } + + @Test + fun getByObjectID() { + runBlocking { + clientPlaces.getByObjectID(ObjectID("201316654_7340078")) // New-York + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/dsl/TestDSLPlacesQuery.kt b/src/commonTest/kotlin/dsl/TestDSLPlacesQuery.kt new file mode 100644 index 000000000..ef938ae07 --- /dev/null +++ b/src/commonTest/kotlin/dsl/TestDSLPlacesQuery.kt @@ -0,0 +1,21 @@ +package dsl + +import com.algolia.search.dsl.countries +import com.algolia.search.dsl.placesQuery +import shouldNotBeNull +import kotlin.test.Test + + +internal class TestDSLPlacesQuery { + + @Test + fun countries() { + val placesQuery = placesQuery { + countries { + +France + } + } + + placesQuery.countries.shouldNotBeNull() + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/dsl/languages/TestDSLCountries.kt b/src/commonTest/kotlin/dsl/languages/TestDSLCountries.kt new file mode 100644 index 000000000..d95b00641 --- /dev/null +++ b/src/commonTest/kotlin/dsl/languages/TestDSLCountries.kt @@ -0,0 +1,276 @@ +package dsl.languages + +import com.algolia.search.dsl.places.DSLCountries +import com.algolia.search.model.places.Country +import shouldEqual +import kotlin.test.Test + + +internal class TestDSLCountries { + + @Test + fun default() { + val dsl = DSLCountries { + +France + } + + dsl shouldEqual listOf( + Country.France + ) + } + + @Test + fun countries() { + DSLCountries().apply { + Afghanistan shouldEqual Country.Afghanistan + AlandIslands shouldEqual Country.AlandIslands + Albania shouldEqual Country.Albania + Algeria shouldEqual Country.Algeria + AmericanSamoa shouldEqual Country.AmericanSamoa + Andorra shouldEqual Country.Andorra + Angola shouldEqual Country.Angola + Anguilla shouldEqual Country.Anguilla + Antarctica shouldEqual Country.Antarctica + AntiguaAndBarbuda shouldEqual Country.AntiguaAndBarbuda + Argentina shouldEqual Country.Argentina + Armenia shouldEqual Country.Armenia + Aruba shouldEqual Country.Aruba + Australia shouldEqual Country.Australia + Austria shouldEqual Country.Austria + Azerbaijan shouldEqual Country.Azerbaijan + Bahamas shouldEqual Country.Bahamas + Bahrain shouldEqual Country.Bahrain + Bangladesh shouldEqual Country.Bangladesh + Barbados shouldEqual Country.Barbados + Belarus shouldEqual Country.Belarus + Belgium shouldEqual Country.Belgium + Belize shouldEqual Country.Belize + Benin shouldEqual Country.Benin + Bermuda shouldEqual Country.Bermuda + Bhutan shouldEqual Country.Bhutan + Bolivia shouldEqual Country.Bolivia + CaribbeanNetherlands shouldEqual Country.CaribbeanNetherlands + BosniaAndHerzegovina shouldEqual Country.BosniaAndHerzegovina + Botswana shouldEqual Country.Botswana + BouvetIsland shouldEqual Country.BouvetIsland + Brazil shouldEqual Country.Brazil + BritishIndianOceanTerritory shouldEqual Country.BritishIndianOceanTerritory + BruneiDarussalam shouldEqual Country.BruneiDarussalam + Bulgaria shouldEqual Country.Bulgaria + BurkinaFaso shouldEqual Country.BurkinaFaso + Burundi shouldEqual Country.Burundi + CaboVerde shouldEqual Country.CaboVerde + Cambodia shouldEqual Country.Cambodia + Cameroon shouldEqual Country.Cameroon + Canada shouldEqual Country.Canada + CaymanIslands shouldEqual Country.CaymanIslands + CentralAfricanRepublic shouldEqual Country.CentralAfricanRepublic + Chad shouldEqual Country.Chad + Chile shouldEqual Country.Chile + China shouldEqual Country.China + ChristmasIsland shouldEqual Country.ChristmasIsland + CocosIslands shouldEqual Country.CocosIslands + Colombia shouldEqual Country.Colombia + Comoros shouldEqual Country.Comoros + RepublicOfTheCongo shouldEqual Country.RepublicOfTheCongo + DemocraticRepublicOfTheCongo shouldEqual Country.DemocraticRepublicOfTheCongo + CookIslands shouldEqual Country.CookIslands + CostaRica shouldEqual Country.CostaRica + IvoryCoast shouldEqual Country.IvoryCoast + Croatia shouldEqual Country.Croatia + Cuba shouldEqual Country.Cuba + Curacao shouldEqual Country.Curacao + Cyprus shouldEqual Country.Cyprus + CzechRepublic shouldEqual Country.CzechRepublic + Denmark shouldEqual Country.Denmark + Djibouti shouldEqual Country.Djibouti + Dominica shouldEqual Country.Dominica + DominicanRepublic shouldEqual Country.DominicanRepublic + Ecuador shouldEqual Country.Ecuador + Egypt shouldEqual Country.Egypt + ElSalvador shouldEqual Country.ElSalvador + EquatorialGuinea shouldEqual Country.EquatorialGuinea + Eritrea shouldEqual Country.Eritrea + Estonia shouldEqual Country.Estonia + Eswatini shouldEqual Country.Eswatini + Ethiopia shouldEqual Country.Ethiopia + FalklandIslands shouldEqual Country.FalklandIslands + FaroeIslands shouldEqual Country.FaroeIslands + Fiji shouldEqual Country.Fiji + Finland shouldEqual Country.Finland + France shouldEqual Country.France + FrenchGuiana shouldEqual Country.FrenchGuiana + FrenchPolynesia shouldEqual Country.FrenchPolynesia + FrenchSouthernAndAntarcticLands shouldEqual Country.FrenchSouthernAndAntarcticLands + Gabon shouldEqual Country.Gabon + Gambia shouldEqual Country.Gambia + Georgia shouldEqual Country.Georgia + Germany shouldEqual Country.Germany + Ghana shouldEqual Country.Ghana + Gibraltar shouldEqual Country.Gibraltar + Greece shouldEqual Country.Greece + Greenland shouldEqual Country.Greenland + Grenada shouldEqual Country.Grenada + Guadeloupe shouldEqual Country.Guadeloupe + Guam shouldEqual Country.Guam + Guatemala shouldEqual Country.Guatemala + BailiwickOfGuernsey shouldEqual Country.BailiwickOfGuernsey + Guinea shouldEqual Country.Guinea + GuineaBissau shouldEqual Country.GuineaBissau + Guyana shouldEqual Country.Guyana + Haiti shouldEqual Country.Haiti + HeardIslandAndMcDonaldIslands shouldEqual Country.HeardIslandAndMcDonaldIslands + VaticanCity shouldEqual Country.VaticanCity + Honduras shouldEqual Country.Honduras + HongKong shouldEqual Country.HongKong + Hungary shouldEqual Country.Hungary + Iceland shouldEqual Country.Iceland + India shouldEqual Country.India + Indonesia shouldEqual Country.Indonesia + Iran shouldEqual Country.Iran + Iraq shouldEqual Country.Iraq + Ireland shouldEqual Country.Ireland + IsleOfMan shouldEqual Country.IsleOfMan + Israel shouldEqual Country.Israel + Italy shouldEqual Country.Italy + Jamaica shouldEqual Country.Jamaica + Japan shouldEqual Country.Japan + Jersey shouldEqual Country.Jersey + Jordan shouldEqual Country.Jordan + Kazakhstan shouldEqual Country.Kazakhstan + Kenya shouldEqual Country.Kenya + Kiribati shouldEqual Country.Kiribati + NorthKorea shouldEqual Country.NorthKorea + SouthKorea shouldEqual Country.SouthKorea + Kuwait shouldEqual Country.Kuwait + Kyrgyzstan shouldEqual Country.Kyrgyzstan + Laos shouldEqual Country.Laos + Latvia shouldEqual Country.Latvia + Lebanon shouldEqual Country.Lebanon + Lesotho shouldEqual Country.Lesotho + Liberia shouldEqual Country.Liberia + Libya shouldEqual Country.Libya + Liechtenstein shouldEqual Country.Liechtenstein + Lithuania shouldEqual Country.Lithuania + Luxembourg shouldEqual Country.Luxembourg + Macau shouldEqual Country.Macau + Madagascar shouldEqual Country.Madagascar + Malawi shouldEqual Country.Malawi + Malaysia shouldEqual Country.Malaysia + Maldives shouldEqual Country.Maldives + Mali shouldEqual Country.Mali + Malta shouldEqual Country.Malta + MarshallIslands shouldEqual Country.MarshallIslands + Martinique shouldEqual Country.Martinique + Mauritania shouldEqual Country.Mauritania + Mauritius shouldEqual Country.Mauritius + Mayotte shouldEqual Country.Mayotte + Mexico shouldEqual Country.Mexico + Micronesia shouldEqual Country.Micronesia + Moldova shouldEqual Country.Moldova + Monaco shouldEqual Country.Monaco + Mongolia shouldEqual Country.Mongolia + Montenegro shouldEqual Country.Montenegro + Montserrat shouldEqual Country.Montserrat + Morocco shouldEqual Country.Morocco + Mozambique shouldEqual Country.Mozambique + Myanmar shouldEqual Country.Myanmar + Namibia shouldEqual Country.Namibia + Nauru shouldEqual Country.Nauru + Nepal shouldEqual Country.Nepal + Netherlands shouldEqual Country.Netherlands + NewCaledonia shouldEqual Country.NewCaledonia + NewZealand shouldEqual Country.NewZealand + Nicaragua shouldEqual Country.Nicaragua + Niger shouldEqual Country.Niger + Nigeria shouldEqual Country.Nigeria + Niue shouldEqual Country.Niue + NorfolkIsland shouldEqual Country.NorfolkIsland + NorthMacedonia shouldEqual Country.NorthMacedonia + NorthernMarianaIslands shouldEqual Country.NorthernMarianaIslands + Norway shouldEqual Country.Norway + Oman shouldEqual Country.Oman + Pakistan shouldEqual Country.Pakistan + Palau shouldEqual Country.Palau + Palestine shouldEqual Country.Palestine + Panama shouldEqual Country.Panama + PapuaNewGuinea shouldEqual Country.PapuaNewGuinea + Paraguay shouldEqual Country.Paraguay + Peru shouldEqual Country.Peru + Philippines shouldEqual Country.Philippines + PitcairnIslands shouldEqual Country.PitcairnIslands + Poland shouldEqual Country.Poland + Portugal shouldEqual Country.Portugal + PuertoRico shouldEqual Country.PuertoRico + Qatar shouldEqual Country.Qatar + Reunion shouldEqual Country.Reunion + Romania shouldEqual Country.Romania + Russia shouldEqual Country.Russia + Rwanda shouldEqual Country.Rwanda + SaintBarthelemy shouldEqual Country.SaintBarthelemy + SaintHelena shouldEqual Country.SaintHelena + SaintKittsAndNevis shouldEqual Country.SaintKittsAndNevis + SaintLucia shouldEqual Country.SaintLucia + SaintMartin shouldEqual Country.SaintMartin + SaintPierreAndMiquelon shouldEqual Country.SaintPierreAndMiquelon + SaintVincentAndTheGrenadines shouldEqual Country.SaintVincentAndTheGrenadines + Samoa shouldEqual Country.Samoa + SanMarino shouldEqual Country.SanMarino + SaoTomeAndPrincipe shouldEqual Country.SaoTomeAndPrincipe + SaudiArabia shouldEqual Country.SaudiArabia + Senegal shouldEqual Country.Senegal + Serbia shouldEqual Country.Serbia + Seychelles shouldEqual Country.Seychelles + SierraLeone shouldEqual Country.SierraLeone + Singapore shouldEqual Country.Singapore + SintMaarten shouldEqual Country.SintMaarten + Slovakia shouldEqual Country.Slovakia + Slovenia shouldEqual Country.Slovenia + SolomonIslands shouldEqual Country.SolomonIslands + Somalia shouldEqual Country.Somalia + SouthAfrica shouldEqual Country.SouthAfrica + SouthGeorgiaAndTheSouthSandwichIslands shouldEqual Country.SouthGeorgiaAndTheSouthSandwichIslands + SouthSudan shouldEqual Country.SouthSudan + Spain shouldEqual Country.Spain + SriLanka shouldEqual Country.SriLanka + Sudan shouldEqual Country.Sudan + Suriname shouldEqual Country.Suriname + SvalbardAndJanMayen shouldEqual Country.SvalbardAndJanMayen + Sweden shouldEqual Country.Sweden + Switzerland shouldEqual Country.Switzerland + Syria shouldEqual Country.Syria + Taiwan shouldEqual Country.Taiwan + Tajikistan shouldEqual Country.Tajikistan + Tanzania shouldEqual Country.Tanzania + Thailand shouldEqual Country.Thailand + TimorLeste shouldEqual Country.TimorLeste + Togo shouldEqual Country.Togo + Tokelau shouldEqual Country.Tokelau + Tonga shouldEqual Country.Tonga + TrinidadAndTobago shouldEqual Country.TrinidadAndTobago + Tunisia shouldEqual Country.Tunisia + Turkey shouldEqual Country.Turkey + Turkmenistan shouldEqual Country.Turkmenistan + TurksAndCaicosIslands shouldEqual Country.TurksAndCaicosIslands + Tuvalu shouldEqual Country.Tuvalu + Uganda shouldEqual Country.Uganda + Ukraine shouldEqual Country.Ukraine + UnitedArabEmirates shouldEqual Country.UnitedArabEmirates + UnitedKingdom shouldEqual Country.UnitedKingdom + UnitedStates shouldEqual Country.UnitedStates + UnitedStatesMinorOutlyingIslands shouldEqual Country.UnitedStatesMinorOutlyingIslands + Uruguay shouldEqual Country.Uruguay + Uzbekistan shouldEqual Country.Uzbekistan + Vanuatu shouldEqual Country.Vanuatu + Venezuela shouldEqual Country.Venezuela + Vietnam shouldEqual Country.Vietnam + VirginIslandsGB shouldEqual Country.VirginIslandsGB + VirginIslandsUS shouldEqual Country.VirginIslandsUS + WallisAndFutuna shouldEqual Country.WallisAndFutuna + WesternSahara shouldEqual Country.WesternSahara + Yemen shouldEqual Country.Yemen + Zambia shouldEqual Country.Zambia + Zimbabwe shouldEqual Country.Zimbabwe + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/dsl/languages/TestDSLDecompoundedAttributes.kt b/src/commonTest/kotlin/dsl/languages/TestDSLDecompoundedAttributes.kt index 06dd8d593..b3fd31146 100644 --- a/src/commonTest/kotlin/dsl/languages/TestDSLDecompoundedAttributes.kt +++ b/src/commonTest/kotlin/dsl/languages/TestDSLDecompoundedAttributes.kt @@ -2,7 +2,7 @@ package dsl.languages import attributeA import com.algolia.search.dsl.languages.DSLDecompoundedAttributes -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import com.algolia.search.model.settings.DecompoundedAttributes import shouldEqual import kotlin.test.Test @@ -19,9 +19,9 @@ internal class TestDSLDecompoundedAttributes { } dsl shouldEqual listOf( - DecompoundedAttributes(QueryLanguage.German, attributeA), - DecompoundedAttributes(QueryLanguage.Dutch, attributeA), - DecompoundedAttributes(QueryLanguage.Finnish, attributeA) + DecompoundedAttributes(Language.German, attributeA), + DecompoundedAttributes(Language.Dutch, attributeA), + DecompoundedAttributes(Language.Finnish, attributeA) ) } } \ No newline at end of file diff --git a/src/commonTest/kotlin/dsl/languages/TestDSLQueryLanguage.kt b/src/commonTest/kotlin/dsl/languages/TestDSLQueryLanguage.kt index 6e7bd00a8..86bb32468 100644 --- a/src/commonTest/kotlin/dsl/languages/TestDSLQueryLanguage.kt +++ b/src/commonTest/kotlin/dsl/languages/TestDSLQueryLanguage.kt @@ -1,7 +1,7 @@ package dsl.languages -import com.algolia.search.dsl.languages.DSLQueryLanguage -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.dsl.languages.DSLLanguage +import com.algolia.search.model.search.Language import shouldEqual import kotlin.test.Test @@ -10,74 +10,74 @@ internal class TestDSLQueryLanguage { @Test fun default() { - val dsl = DSLQueryLanguage { + val dsl = DSLLanguage { +English } dsl shouldEqual listOf( - QueryLanguage.English + Language.English ) } @Test fun languages() { - DSLQueryLanguage().apply { - Afrikaans shouldEqual QueryLanguage.Afrikaans - Arabic shouldEqual QueryLanguage.Arabic - Azeri shouldEqual QueryLanguage.Azeri - Bulgarian shouldEqual QueryLanguage.Bulgarian - Brunei shouldEqual QueryLanguage.Brunei - Catalan shouldEqual QueryLanguage.Catalan - Czech shouldEqual QueryLanguage.Czech - Welsh shouldEqual QueryLanguage.Welsh - Danish shouldEqual QueryLanguage.Danish - German shouldEqual QueryLanguage.German - English shouldEqual QueryLanguage.English - Esperanto shouldEqual QueryLanguage.Esperanto - Spanish shouldEqual QueryLanguage.Spanish - Estonian shouldEqual QueryLanguage.Estonian - Basque shouldEqual QueryLanguage.Basque - Finnish shouldEqual QueryLanguage.Finnish - Faroese shouldEqual QueryLanguage.Faroese - French shouldEqual QueryLanguage.French - Galician shouldEqual QueryLanguage.Galician - Hebrew shouldEqual QueryLanguage.Hebrew - Hindi shouldEqual QueryLanguage.Hindi - Hungarian shouldEqual QueryLanguage.Hungarian - Armenian shouldEqual QueryLanguage.Armenian - Indonesian shouldEqual QueryLanguage.Indonesian - Icelandic shouldEqual QueryLanguage.Icelandic - Italian shouldEqual QueryLanguage.Italian - Japanese shouldEqual QueryLanguage.Japanese - Georgian shouldEqual QueryLanguage.Georgian - Kazakh shouldEqual QueryLanguage.Kazakh - Korean shouldEqual QueryLanguage.Korean - Kyrgyz shouldEqual QueryLanguage.Kyrgyz - Lithuanian shouldEqual QueryLanguage.Lithuanian - Maori shouldEqual QueryLanguage.Maori - Mongolian shouldEqual QueryLanguage.Mongolian - Marathi shouldEqual QueryLanguage.Marathi - Malay shouldEqual QueryLanguage.Malay - Maltese shouldEqual QueryLanguage.Maltese - Norwegian shouldEqual QueryLanguage.Norwegian - Dutch shouldEqual QueryLanguage.Dutch - NorthernSotho shouldEqual QueryLanguage.NorthernSotho - Polish shouldEqual QueryLanguage.Polish - Pashto shouldEqual QueryLanguage.Pashto - Portuguese shouldEqual QueryLanguage.Portuguese - Quechua shouldEqual QueryLanguage.Quechua - Romanian shouldEqual QueryLanguage.Romanian - Russian shouldEqual QueryLanguage.Russian - Slovak shouldEqual QueryLanguage.Slovak - Albanian shouldEqual QueryLanguage.Albanian - Swedish shouldEqual QueryLanguage.Swedish - Swahili shouldEqual QueryLanguage.Swahili - Tamil shouldEqual QueryLanguage.Tamil - Telugu shouldEqual QueryLanguage.Telugu - Tagalog shouldEqual QueryLanguage.Tagalog - Tswana shouldEqual QueryLanguage.Tswana - Turkish shouldEqual QueryLanguage.Turkish - Tatar shouldEqual QueryLanguage.Tatar + DSLLanguage().apply { + Afrikaans shouldEqual Language.Afrikaans + Arabic shouldEqual Language.Arabic + Azeri shouldEqual Language.Azeri + Bulgarian shouldEqual Language.Bulgarian + Brunei shouldEqual Language.Brunei + Catalan shouldEqual Language.Catalan + Czech shouldEqual Language.Czech + Welsh shouldEqual Language.Welsh + Danish shouldEqual Language.Danish + German shouldEqual Language.German + English shouldEqual Language.English + Esperanto shouldEqual Language.Esperanto + Spanish shouldEqual Language.Spanish + Estonian shouldEqual Language.Estonian + Basque shouldEqual Language.Basque + Finnish shouldEqual Language.Finnish + Faroese shouldEqual Language.Faroese + French shouldEqual Language.French + Galician shouldEqual Language.Galician + Hebrew shouldEqual Language.Hebrew + Hindi shouldEqual Language.Hindi + Hungarian shouldEqual Language.Hungarian + Armenian shouldEqual Language.Armenian + Indonesian shouldEqual Language.Indonesian + Icelandic shouldEqual Language.Icelandic + Italian shouldEqual Language.Italian + Japanese shouldEqual Language.Japanese + Georgian shouldEqual Language.Georgian + Kazakh shouldEqual Language.Kazakh + Korean shouldEqual Language.Korean + Kyrgyz shouldEqual Language.Kyrgyz + Lithuanian shouldEqual Language.Lithuanian + Maori shouldEqual Language.Maori + Mongolian shouldEqual Language.Mongolian + Marathi shouldEqual Language.Marathi + Malay shouldEqual Language.Malay + Maltese shouldEqual Language.Maltese + Norwegian shouldEqual Language.Norwegian + Dutch shouldEqual Language.Dutch + NorthernSotho shouldEqual Language.NorthernSotho + Polish shouldEqual Language.Polish + Pashto shouldEqual Language.Pashto + Portuguese shouldEqual Language.Portuguese + Quechua shouldEqual Language.Quechua + Romanian shouldEqual Language.Romanian + Russian shouldEqual Language.Russian + Slovak shouldEqual Language.Slovak + Albanian shouldEqual Language.Albanian + Swedish shouldEqual Language.Swedish + Swahili shouldEqual Language.Swahili + Tamil shouldEqual Language.Tamil + Telugu shouldEqual Language.Telugu + Tagalog shouldEqual Language.Tagalog + Tswana shouldEqual Language.Tswana + Turkish shouldEqual Language.Turkish + Tatar shouldEqual Language.Tatar } } } \ No newline at end of file diff --git a/src/commonTest/kotlin/model/places/TestCountries.kt b/src/commonTest/kotlin/model/places/TestCountries.kt new file mode 100644 index 000000000..7bd100eb2 --- /dev/null +++ b/src/commonTest/kotlin/model/places/TestCountries.kt @@ -0,0 +1,263 @@ +package model.places + +import com.algolia.search.model.places.Country.* +import com.algolia.search.serialize.* +import shouldEqual +import kotlin.test.Test + + +internal class TestCountries { + + @Test + fun raw() { + Afghanistan.raw shouldEqual KeyAfghanistan + AlandIslands.raw shouldEqual KeyAlandIslands + Albania.raw shouldEqual KeyAlbania + Algeria.raw shouldEqual KeyAlgeria + AmericanSamoa.raw shouldEqual KeyAmericanSamoa + Andorra.raw shouldEqual KeyAndorra + Angola.raw shouldEqual KeyAngola + Anguilla.raw shouldEqual KeyAnguilla + Antarctica.raw shouldEqual KeyAntarctica + AntiguaAndBarbuda.raw shouldEqual KeyAntiguaAndBarbuda + Argentina.raw shouldEqual KeyArgentina + Armenia.raw shouldEqual KeyArmenia + Aruba.raw shouldEqual KeyAruba + Australia.raw shouldEqual KeyAustralia + Austria.raw shouldEqual KeyAustria + Azerbaijan.raw shouldEqual KeyAzerbaijan + Bahamas.raw shouldEqual KeyBahamas + Bahrain.raw shouldEqual KeyBahrain + Bangladesh.raw shouldEqual KeyBangladesh + Barbados.raw shouldEqual KeyBarbados + Belarus.raw shouldEqual KeyBelarus + Belgium.raw shouldEqual KeyBelgium + Belize.raw shouldEqual KeyBelize + Benin.raw shouldEqual KeyBenin + Bermuda.raw shouldEqual KeyBermuda + Bhutan.raw shouldEqual KeyBhutan + Bolivia.raw shouldEqual KeyBolivia + CaribbeanNetherlands.raw shouldEqual KeyCaribbeanNetherlands + BosniaAndHerzegovina.raw shouldEqual KeyBosniaAndHerzegovina + Botswana.raw shouldEqual KeyBotswana + BouvetIsland.raw shouldEqual KeyBouvetIsland + Brazil.raw shouldEqual KeyBrazil + BritishIndianOceanTerritory.raw shouldEqual KeyBritishIndianOceanTerritory + BruneiDarussalam.raw shouldEqual KeyBruneiDarussalam + Bulgaria.raw shouldEqual KeyBulgaria + BurkinaFaso.raw shouldEqual KeyBurkinaFaso + Burundi.raw shouldEqual KeyBurundi + CaboVerde.raw shouldEqual KeyCaboVerde + Cambodia.raw shouldEqual KeyCambodia + Cameroon.raw shouldEqual KeyCameroon + Canada.raw shouldEqual KeyCanada + CaymanIslands.raw shouldEqual KeyCaymanIslands + CentralAfricanRepublic.raw shouldEqual KeyCentralAfricanRepublic + Chad.raw shouldEqual KeyChad + Chile.raw shouldEqual KeyChile + China.raw shouldEqual KeyChina + ChristmasIsland.raw shouldEqual KeyChristmasIsland + CocosIslands.raw shouldEqual KeyCocosIslands + Colombia.raw shouldEqual KeyColombia + Comoros.raw shouldEqual KeyComoros + RepublicOfTheCongo.raw shouldEqual KeyRepublicOfTheCongo + DemocraticRepublicOfTheCongo.raw shouldEqual KeyDemocraticRepublicOfTheCongo + CookIslands.raw shouldEqual KeyCookIslands + CostaRica.raw shouldEqual KeyCostaRica + IvoryCoast.raw shouldEqual KeyIvoryCoast + Croatia.raw shouldEqual KeyCroatia + Cuba.raw shouldEqual KeyCuba + Curacao.raw shouldEqual KeyCuracao + Cyprus.raw shouldEqual KeyCyprus + CzechRepublic.raw shouldEqual KeyCzechRepublic + Denmark.raw shouldEqual KeyDenmark + Djibouti.raw shouldEqual KeyDjibouti + Dominica.raw shouldEqual KeyDominica + DominicanRepublic.raw shouldEqual KeyDominicanRepublic + Ecuador.raw shouldEqual KeyEcuador + Egypt.raw shouldEqual KeyEgypt + ElSalvador.raw shouldEqual KeyElSalvador + EquatorialGuinea.raw shouldEqual KeyEquatorialGuinea + Eritrea.raw shouldEqual KeyEritrea + Estonia.raw shouldEqual KeyEstonia + Eswatini.raw shouldEqual KeyEswatini + Ethiopia.raw shouldEqual KeyEthiopia + FalklandIslands.raw shouldEqual KeyFalklandIslands + FaroeIslands.raw shouldEqual KeyFaroeIslands + Fiji.raw shouldEqual KeyFiji + Finland.raw shouldEqual KeyFinland + France.raw shouldEqual KeyFrance + FrenchGuiana.raw shouldEqual KeyFrenchGuiana + FrenchPolynesia.raw shouldEqual KeyFrenchPolynesia + FrenchSouthernAndAntarcticLands.raw shouldEqual KeyFrenchSouthernAndAntarcticLands + Gabon.raw shouldEqual KeyGabon + Gambia.raw shouldEqual KeyGambia + Georgia.raw shouldEqual KeyGeorgia + Germany.raw shouldEqual KeyGermany + Ghana.raw shouldEqual KeyGhana + Gibraltar.raw shouldEqual KeyGibraltar + Greece.raw shouldEqual KeyGreece + Greenland.raw shouldEqual KeyGreenland + Grenada.raw shouldEqual KeyGrenada + Guadeloupe.raw shouldEqual KeyGuadeloupe + Guam.raw shouldEqual KeyGuam + Guatemala.raw shouldEqual KeyGuatemala + BailiwickOfGuernsey.raw shouldEqual KeyBailiwickOfGuernsey + Guinea.raw shouldEqual KeyGuinea + GuineaBissau.raw shouldEqual KeyGuineaBissau + Guyana.raw shouldEqual KeyGuyana + Haiti.raw shouldEqual KeyHaiti + HeardIslandAndMcDonaldIslands.raw shouldEqual KeyHeardIslandAndMcDonaldIslands + VaticanCity.raw shouldEqual KeyVaticanCity + Honduras.raw shouldEqual KeyHonduras + HongKong.raw shouldEqual KeyHongKong + Hungary.raw shouldEqual KeyHungary + Iceland.raw shouldEqual KeyIceland + India.raw shouldEqual KeyIndia + Indonesia.raw shouldEqual KeyIndonesia + Iran.raw shouldEqual KeyIran + Iraq.raw shouldEqual KeyIraq + Ireland.raw shouldEqual KeyIreland + IsleOfMan.raw shouldEqual KeyIsleOfMan + Israel.raw shouldEqual KeyIsrael + Italy.raw shouldEqual KeyItaly + Jamaica.raw shouldEqual KeyJamaica + Japan.raw shouldEqual KeyJapan + Jersey.raw shouldEqual KeyJersey + Jordan.raw shouldEqual KeyJordan + Kazakhstan.raw shouldEqual KeyKazakhstan + Kenya.raw shouldEqual KeyKenya + Kiribati.raw shouldEqual KeyKiribati + NorthKorea.raw shouldEqual KeyNorthKorea + SouthKorea.raw shouldEqual KeySouthKorea + Kuwait.raw shouldEqual KeyKuwait + Kyrgyzstan.raw shouldEqual KeyKyrgyzstan + Laos.raw shouldEqual KeyLaos + Latvia.raw shouldEqual KeyLatvia + Lebanon.raw shouldEqual KeyLebanon + Lesotho.raw shouldEqual KeyLesotho + Liberia.raw shouldEqual KeyLiberia + Libya.raw shouldEqual KeyLibya + Liechtenstein.raw shouldEqual KeyLiechtenstein + Lithuania.raw shouldEqual KeyLithuania + Luxembourg.raw shouldEqual KeyLuxembourg + Macau.raw shouldEqual KeyMacau + Madagascar.raw shouldEqual KeyMadagascar + Malawi.raw shouldEqual KeyMalawi + Malaysia.raw shouldEqual KeyMalaysia + Maldives.raw shouldEqual KeyMaldives + Mali.raw shouldEqual KeyMali + Malta.raw shouldEqual KeyMalta + MarshallIslands.raw shouldEqual KeyMarshallIslands + Martinique.raw shouldEqual KeyMartinique + Mauritania.raw shouldEqual KeyMauritania + Mauritius.raw shouldEqual KeyMauritius + Mayotte.raw shouldEqual KeyMayotte + Mexico.raw shouldEqual KeyMexico + Micronesia.raw shouldEqual KeyMicronesia + Moldova.raw shouldEqual KeyMoldova + Monaco.raw shouldEqual KeyMonaco + Mongolia.raw shouldEqual KeyMongolia + Montenegro.raw shouldEqual KeyMontenegro + Montserrat.raw shouldEqual KeyMontserrat + Morocco.raw shouldEqual KeyMorocco + Mozambique.raw shouldEqual KeyMozambique + Myanmar.raw shouldEqual KeyMyanmar + Namibia.raw shouldEqual KeyNamibia + Nauru.raw shouldEqual KeyNauru + Nepal.raw shouldEqual KeyNepal + Netherlands.raw shouldEqual KeyNetherlands + NewCaledonia.raw shouldEqual KeyNewCaledonia + NewZealand.raw shouldEqual KeyNewZealand + Nicaragua.raw shouldEqual KeyNicaragua + Niger.raw shouldEqual KeyNiger + Nigeria.raw shouldEqual KeyNigeria + Niue.raw shouldEqual KeyNiue + NorfolkIsland.raw shouldEqual KeyNorfolkIsland + NorthMacedonia.raw shouldEqual KeyNorthMacedonia + NorthernMarianaIslands.raw shouldEqual KeyNorthernMarianaIslands + Norway.raw shouldEqual KeyNorway + Oman.raw shouldEqual KeyOman + Pakistan.raw shouldEqual KeyPakistan + Palau.raw shouldEqual KeyPalau + Palestine.raw shouldEqual KeyPalestine + Panama.raw shouldEqual KeyPanama + PapuaNewGuinea.raw shouldEqual KeyPapuaNewGuinea + Paraguay.raw shouldEqual KeyParaguay + Peru.raw shouldEqual KeyPeru + Philippines.raw shouldEqual KeyPhilippines + PitcairnIslands.raw shouldEqual KeyPitcairnIslands + Poland.raw shouldEqual KeyPoland + Portugal.raw shouldEqual KeyPortugal + PuertoRico.raw shouldEqual KeyPuertoRico + Qatar.raw shouldEqual KeyQatar + Reunion.raw shouldEqual KeyReunion + Romania.raw shouldEqual KeyRomania + Russia.raw shouldEqual KeyRussia + Rwanda.raw shouldEqual KeyRwanda + SaintBarthelemy.raw shouldEqual KeySaintBarthelemy + SaintHelena.raw shouldEqual KeySaintHelena + SaintKittsAndNevis.raw shouldEqual KeySaintKittsAndNevis + SaintLucia.raw shouldEqual KeySaintLucia + SaintMartin.raw shouldEqual KeySaintMartin + SaintPierreAndMiquelon.raw shouldEqual KeySaintPierreAndMiquelon + SaintVincentAndTheGrenadines.raw shouldEqual KeySaintVincentAndTheGrenadines + Samoa.raw shouldEqual KeySamoa + SanMarino.raw shouldEqual KeySanMarino + SaoTomeAndPrincipe.raw shouldEqual KeySaoTomeAndPrincipe + SaudiArabia.raw shouldEqual KeySaudiArabia + Senegal.raw shouldEqual KeySenegal + Serbia.raw shouldEqual KeySerbia + Seychelles.raw shouldEqual KeySeychelles + SierraLeone.raw shouldEqual KeySierraLeone + Singapore.raw shouldEqual KeySingapore + SintMaarten.raw shouldEqual KeySintMaarten + Slovakia.raw shouldEqual KeySlovakia + Slovenia.raw shouldEqual KeySlovenia + SolomonIslands.raw shouldEqual KeySolomonIslands + Somalia.raw shouldEqual KeySomalia + SouthAfrica.raw shouldEqual KeySouthAfrica + SouthGeorgiaAndTheSouthSandwichIslands.raw shouldEqual KeySouthGeorgiaAndTheSouthSandwichIslands + SouthSudan.raw shouldEqual KeySouthSudan + Spain.raw shouldEqual KeySpain + SriLanka.raw shouldEqual KeySriLanka + Sudan.raw shouldEqual KeySudan + Suriname.raw shouldEqual KeySuriname + SvalbardAndJanMayen.raw shouldEqual KeySvalbardAndJanMayen + Sweden.raw shouldEqual KeySweden + Switzerland.raw shouldEqual KeySwitzerland + Syria.raw shouldEqual KeySyria + Taiwan.raw shouldEqual KeyTaiwan + Tajikistan.raw shouldEqual KeyTajikistan + Tanzania.raw shouldEqual KeyTanzania + Thailand.raw shouldEqual KeyThailand + TimorLeste.raw shouldEqual KeyTimorLeste + Togo.raw shouldEqual KeyTogo + Tokelau.raw shouldEqual KeyTokelau + Tonga.raw shouldEqual KeyTonga + TrinidadAndTobago.raw shouldEqual KeyTrinidadAndTobago + Tunisia.raw shouldEqual KeyTunisia + Turkey.raw shouldEqual KeyTurkey + Turkmenistan.raw shouldEqual KeyTurkmenistan + TurksAndCaicosIslands.raw shouldEqual KeyTurksAndCaicosIslands + Tuvalu.raw shouldEqual KeyTuvalu + Uganda.raw shouldEqual KeyUganda + Ukraine.raw shouldEqual KeyUkraine + UnitedArabEmirates.raw shouldEqual KeyUnitedArabEmirates + UnitedKingdom.raw shouldEqual KeyUnitedKingdom + UnitedStates.raw shouldEqual KeyUnitedStates + UnitedStatesMinorOutlyingIslands.raw shouldEqual KeyUnitedStatesMinorOutlyingIslands + Uruguay.raw shouldEqual KeyUruguay + Uzbekistan.raw shouldEqual KeyUzbekistan + Vanuatu.raw shouldEqual KeyVanuatu + Venezuela.raw shouldEqual KeyVenezuela + Vietnam.raw shouldEqual KeyVietnam + VirginIslandsGB.raw shouldEqual KeyVirginIslandsGB + VirginIslandsUS.raw shouldEqual KeyVirginIslandsUS + WallisAndFutuna.raw shouldEqual KeyWallisAndFutuna + WesternSahara.raw shouldEqual KeyWesternSahara + Yemen.raw shouldEqual KeyYemen + Zambia.raw shouldEqual KeyZambia + Zimbabwe.raw shouldEqual KeyZimbabwe + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/model/places/TestPlaceMulti.kt b/src/commonTest/kotlin/model/places/TestPlaceMulti.kt new file mode 100644 index 000000000..1e70d95da --- /dev/null +++ b/src/commonTest/kotlin/model/places/TestPlaceMulti.kt @@ -0,0 +1,21 @@ +package model.places + +import com.algolia.search.model.places.PlaceLanguages +import com.algolia.search.model.search.Language +import shouldEqual +import kotlin.test.Test + + +internal class TestPlaceMulti { + + @Test + fun dx() { + val cities = listOf( + "Paris", + "New-York" + ) + val place = PlaceLanguages(cityOrNull = mapOf(Language.French to cities)) + + place.city.getValue(Language.French) shouldEqual cities + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/model/places/TestPlaceType.kt b/src/commonTest/kotlin/model/places/TestPlaceType.kt new file mode 100644 index 000000000..9ed7e2545 --- /dev/null +++ b/src/commonTest/kotlin/model/places/TestPlaceType.kt @@ -0,0 +1,23 @@ +package model.places + +import com.algolia.search.model.places.PlaceType.* +import com.algolia.search.serialize.* +import shouldEqual +import unknown +import kotlin.test.Test + + +internal class TestPlaceType { + + @Test + fun raw() { + City.raw shouldEqual KeyCity + Country.raw shouldEqual KeyCountry + Address.raw shouldEqual KeyAddress + BusStop.raw shouldEqual KeyBusStop + TrainStation.raw shouldEqual KeyTrainStation + TownHall.raw shouldEqual KeyTownhall + Airport.raw shouldEqual KeyAirport + Other(unknown).raw shouldEqual unknown + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/model/request/TestRequestEmptyBody.kt b/src/commonTest/kotlin/model/request/TestRequestEmptyBody.kt new file mode 100644 index 000000000..c2bed3d67 --- /dev/null +++ b/src/commonTest/kotlin/model/request/TestRequestEmptyBody.kt @@ -0,0 +1,14 @@ +package model.request + +import com.algolia.search.model.request.EmptyBody +import shouldEqual +import kotlin.test.Test + + +internal class TestRequestEmptyBody { + + @Test + fun test() { + EmptyBody shouldEqual "" + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/model/search/TestQueryLanguage.kt b/src/commonTest/kotlin/model/search/TestLanguage.kt similarity index 96% rename from src/commonTest/kotlin/model/search/TestQueryLanguage.kt rename to src/commonTest/kotlin/model/search/TestLanguage.kt index 00113c66b..bbdcb1beb 100644 --- a/src/commonTest/kotlin/model/search/TestQueryLanguage.kt +++ b/src/commonTest/kotlin/model/search/TestLanguage.kt @@ -1,12 +1,12 @@ package model.search -import com.algolia.search.model.search.QueryLanguage.* +import com.algolia.search.model.search.Language.* import com.algolia.search.serialize.* import shouldEqual import kotlin.test.Test -internal class TestQueryLanguage { +internal class TestLanguage { @Test fun raw() { diff --git a/src/commonTest/kotlin/serialize/TestCountries.kt b/src/commonTest/kotlin/serialize/TestCountries.kt new file mode 100644 index 000000000..68f786ab3 --- /dev/null +++ b/src/commonTest/kotlin/serialize/TestCountries.kt @@ -0,0 +1,262 @@ +package serialize + +import com.algolia.search.serialize.* +import shouldEqual +import kotlin.test.Test + + +internal class TestCountries { + + @Test + fun test() { + KeyAfghanistan shouldEqual "af" + KeyAlandIslands shouldEqual "ax" + KeyAlbania shouldEqual "al" + KeyAlgeria shouldEqual "dz" + KeyAmericanSamoa shouldEqual "as" + KeyAndorra shouldEqual "ad" + KeyAngola shouldEqual "ao" + KeyAnguilla shouldEqual "ai" + KeyAntarctica shouldEqual "aq" + KeyAntiguaAndBarbuda shouldEqual "ag" + KeyArgentina shouldEqual "ar" + KeyArmenia shouldEqual "am" + KeyAruba shouldEqual "aw" + KeyAustralia shouldEqual "au" + KeyAustria shouldEqual "at" + KeyAzerbaijan shouldEqual "az" + KeyBahamas shouldEqual "bs" + KeyBahrain shouldEqual "bh" + KeyBangladesh shouldEqual "bd" + KeyBarbados shouldEqual "bb" + KeyBelarus shouldEqual "by" + KeyBelgium shouldEqual "be" + KeyBelize shouldEqual "bz" + KeyBenin shouldEqual "bj" + KeyBermuda shouldEqual "bm" + KeyBhutan shouldEqual "bt" + KeyBolivia shouldEqual "bo" + KeyCaribbeanNetherlands shouldEqual "bq" + KeyBosniaAndHerzegovina shouldEqual "ba" + KeyBotswana shouldEqual "bw" + KeyBouvetIsland shouldEqual "bv" + KeyBrazil shouldEqual "br" + KeyBritishIndianOceanTerritory shouldEqual "io" + KeyBruneiDarussalam shouldEqual "bn" + KeyBulgaria shouldEqual "bg" + KeyBurkinaFaso shouldEqual "bf" + KeyBurundi shouldEqual "bi" + KeyCaboVerde shouldEqual "cv" + KeyCambodia shouldEqual "kh" + KeyCameroon shouldEqual "cm" + KeyCanada shouldEqual "ca" + KeyCaymanIslands shouldEqual "ky" + KeyCentralAfricanRepublic shouldEqual "cf" + KeyChad shouldEqual "td" + KeyChile shouldEqual "cl" + KeyChina shouldEqual "cn" + KeyChristmasIsland shouldEqual "cx" + KeyCocosIslands shouldEqual "cc" + KeyColombia shouldEqual "co" + KeyComoros shouldEqual "km" + KeyRepublicOfTheCongo shouldEqual "cg" + KeyDemocraticRepublicOfTheCongo shouldEqual "cd" + KeyCookIslands shouldEqual "ck" + KeyCostaRica shouldEqual "cr" + KeyIvoryCoast shouldEqual "ci" + KeyCroatia shouldEqual "hr" + KeyCuba shouldEqual "cu" + KeyCuracao shouldEqual "cw" + KeyCyprus shouldEqual "cy" + KeyCzechRepublic shouldEqual "cz" + KeyDenmark shouldEqual "dk" + KeyDjibouti shouldEqual "dj" + KeyDominica shouldEqual "dm" + KeyDominicanRepublic shouldEqual "do" + KeyEcuador shouldEqual "ec" + KeyEgypt shouldEqual "eg" + KeyElSalvador shouldEqual "sv" + KeyEquatorialGuinea shouldEqual "gq" + KeyEritrea shouldEqual "er" + KeyEstonia shouldEqual "ee" + KeyEswatini shouldEqual "sz" + KeyEthiopia shouldEqual "et" + KeyFalklandIslands shouldEqual "fk" + KeyFaroeIslands shouldEqual "fo" + KeyFiji shouldEqual "fj" + KeyFinland shouldEqual "fi" + KeyFrance shouldEqual "fr" + KeyFrenchGuiana shouldEqual "gf" + KeyFrenchPolynesia shouldEqual "pf" + KeyFrenchSouthernAndAntarcticLands shouldEqual "tf" + KeyGabon shouldEqual "ga" + KeyGambia shouldEqual "gm" + KeyGeorgia shouldEqual "ge" + KeyGermany shouldEqual "de" + KeyGhana shouldEqual "gh" + KeyGibraltar shouldEqual "gi" + KeyGreece shouldEqual "gr" + KeyGreenland shouldEqual "gl" + KeyGrenada shouldEqual "gd" + KeyGuadeloupe shouldEqual "gp" + KeyGuam shouldEqual "gu" + KeyGuatemala shouldEqual "gt" + KeyBailiwickOfGuernsey shouldEqual "gg" + KeyGuinea shouldEqual "gn" + KeyGuineaBissau shouldEqual "gw" + KeyGuyana shouldEqual "gy" + KeyHaiti shouldEqual "ht" + KeyHeardIslandAndMcDonaldIslands shouldEqual "hm" + KeyVaticanCity shouldEqual "va" + KeyHonduras shouldEqual "hn" + KeyHongKong shouldEqual "hk" + KeyHungary shouldEqual "hu" + KeyIceland shouldEqual "is" + KeyIndia shouldEqual "in" + KeyIndonesia shouldEqual "id" + KeyIran shouldEqual "ir" + KeyIraq shouldEqual "iq" + KeyIreland shouldEqual "ie" + KeyIsleOfMan shouldEqual "im" + KeyIsrael shouldEqual "il" + KeyItaly shouldEqual "it" + KeyJamaica shouldEqual "jm" + KeyJapan shouldEqual "jp" + KeyJersey shouldEqual "je" + KeyJordan shouldEqual "jo" + KeyKazakhstan shouldEqual "kz" + KeyKenya shouldEqual "ke" + KeyKiribati shouldEqual "ki" + KeyNorthKorea shouldEqual "kp" + KeySouthKorea shouldEqual "kr" + KeyKuwait shouldEqual "kw" + KeyKyrgyzstan shouldEqual "kg" + KeyLaos shouldEqual "la" + KeyLatvia shouldEqual "lv" + KeyLebanon shouldEqual "lb" + KeyLesotho shouldEqual "ls" + KeyLiberia shouldEqual "lr" + KeyLibya shouldEqual "ly" + KeyLiechtenstein shouldEqual "li" + KeyLithuania shouldEqual "lt" + KeyLuxembourg shouldEqual "lu" + KeyMacau shouldEqual "mo" + KeyMadagascar shouldEqual "mg" + KeyMalawi shouldEqual "mw" + KeyMalaysia shouldEqual "my" + KeyMaldives shouldEqual "mv" + KeyMali shouldEqual "ml" + KeyMalta shouldEqual "mt" + KeyMarshallIslands shouldEqual "mh" + KeyMartinique shouldEqual "mq" + KeyMauritania shouldEqual "mr" + KeyMauritius shouldEqual "mu" + KeyMayotte shouldEqual "yt" + KeyMexico shouldEqual "mx" + KeyMicronesia shouldEqual "fm" + KeyMoldova shouldEqual "md" + KeyMonaco shouldEqual "mc" + KeyMongolia shouldEqual "mn" + KeyMontenegro shouldEqual "me" + KeyMontserrat shouldEqual "ms" + KeyMorocco shouldEqual "ma" + KeyMozambique shouldEqual "mz" + KeyMyanmar shouldEqual "mm" + KeyNamibia shouldEqual "na" + KeyNauru shouldEqual "nr" + KeyNepal shouldEqual "np" + KeyNetherlands shouldEqual "nl" + KeyNewCaledonia shouldEqual "nc" + KeyNewZealand shouldEqual "nz" + KeyNicaragua shouldEqual "ni" + KeyNiger shouldEqual "ne" + KeyNigeria shouldEqual "ng" + KeyNiue shouldEqual "nu" + KeyNorfolkIsland shouldEqual "nf" + KeyNorthMacedonia shouldEqual "mk" + KeyNorthernMarianaIslands shouldEqual "mp" + KeyNorway shouldEqual "no" + KeyOman shouldEqual "om" + KeyPakistan shouldEqual "pk" + KeyPalau shouldEqual "pw" + KeyPalestine shouldEqual "ps" + KeyPanama shouldEqual "pa" + KeyPapuaNewGuinea shouldEqual "pg" + KeyParaguay shouldEqual "py" + KeyPeru shouldEqual "pe" + KeyPhilippines shouldEqual "ph" + KeyPitcairnIslands shouldEqual "pn" + KeyPoland shouldEqual "pl" + KeyPortugal shouldEqual "pt" + KeyPuertoRico shouldEqual "pr" + KeyQatar shouldEqual "qa" + KeyReunion shouldEqual "re" + KeyRomania shouldEqual "ro" + KeyRussia shouldEqual "ru" + KeyRwanda shouldEqual "rw" + KeySaintBarthelemy shouldEqual "bl" + KeySaintHelena shouldEqual "sh" + KeySaintKittsAndNevis shouldEqual "kn" + KeySaintLucia shouldEqual "lc" + KeySaintMartin shouldEqual "mf" + KeySaintPierreAndMiquelon shouldEqual "pm" + KeySaintVincentAndTheGrenadines shouldEqual "vc" + KeySamoa shouldEqual "ws" + KeySanMarino shouldEqual "sm" + KeySaoTomeAndPrincipe shouldEqual "st" + KeySaudiArabia shouldEqual "sa" + KeySenegal shouldEqual "sn" + KeySerbia shouldEqual "rs" + KeySeychelles shouldEqual "sc" + KeySierraLeone shouldEqual "sl" + KeySingapore shouldEqual "sg" + KeySintMaarten shouldEqual "sx" + KeySlovakia shouldEqual "sk" + KeySlovenia shouldEqual "si" + KeySolomonIslands shouldEqual "sb" + KeySomalia shouldEqual "so" + KeySouthAfrica shouldEqual "za" + KeySouthGeorgiaAndTheSouthSandwichIslands shouldEqual "gs" + KeySouthSudan shouldEqual "ss" + KeySpain shouldEqual "es" + KeySriLanka shouldEqual "lk" + KeySudan shouldEqual "sd" + KeySuriname shouldEqual "sr" + KeySvalbardAndJanMayen shouldEqual "sj" + KeySweden shouldEqual "se" + KeySwitzerland shouldEqual "ch" + KeySyria shouldEqual "sy" + KeyTaiwan shouldEqual "tw" + KeyTajikistan shouldEqual "tj" + KeyTanzania shouldEqual "tz" + KeyThailand shouldEqual "th" + KeyTimorLeste shouldEqual "tl" + KeyTogo shouldEqual "tg" + KeyTokelau shouldEqual "tk" + KeyTonga shouldEqual "to" + KeyTrinidadAndTobago shouldEqual "tt" + KeyTunisia shouldEqual "tn" + KeyTurkey shouldEqual "tr" + KeyTurkmenistan shouldEqual "tm" + KeyTurksAndCaicosIslands shouldEqual "tc" + KeyTuvalu shouldEqual "tv" + KeyUganda shouldEqual "ug" + KeyUkraine shouldEqual "ua" + KeyUnitedArabEmirates shouldEqual "ae" + KeyUnitedKingdom shouldEqual "gb" + KeyUnitedStates shouldEqual "us" + KeyUnitedStatesMinorOutlyingIslands shouldEqual "um" + KeyUruguay shouldEqual "uy" + KeyUzbekistan shouldEqual "uz" + KeyVanuatu shouldEqual "vu" + KeyVenezuela shouldEqual "ve" + KeyVietnam shouldEqual "vn" + KeyVirginIslandsGB shouldEqual "vg" + KeyVirginIslandsUS shouldEqual "vi" + KeyWallisAndFutuna shouldEqual "wf" + KeyWesternSahara shouldEqual "eh" + KeyYemen shouldEqual "ye" + KeyZambia shouldEqual "zm" + KeyZimbabwe shouldEqual "zw" + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/TestKeys.kt b/src/commonTest/kotlin/serialize/TestKeys.kt index 6f77fe8e9..b8cb96e54 100644 --- a/src/commonTest/kotlin/serialize/TestKeys.kt +++ b/src/commonTest/kotlin/serialize/TestKeys.kt @@ -324,72 +324,34 @@ internal class TestKeys { KeyExcludeWords shouldEqual "excludeWords" KeyAdvancedSyntaxFeatures shouldEqual "advancedSyntaxFeatures" KeyPersonalizationImpact shouldEqual "personalizationImpact" - - KeyAfrikaans shouldEqual "af" - KeyArabic shouldEqual "ar" - KeyAzeri shouldEqual "az" - KeyBulgarian shouldEqual "bg" - KeyBrunei shouldEqual "bn" - KeyCatalan shouldEqual "ca" - KeyCzech shouldEqual "cs" - KeyWelsh shouldEqual "cy" - KeyDanish shouldEqual "da" - KeyGerman shouldEqual "de" - KeyEnglish shouldEqual "en" - KeyEsperanto shouldEqual "eo" - KeySpanish shouldEqual "es" - KeyEstonian shouldEqual "et" - KeyBasque shouldEqual "eu" - KeyFinnish shouldEqual "fi" - KeyFaroese shouldEqual "fo" - KeyFrench shouldEqual "fr" - KeyGalician shouldEqual "gl" - KeyHebrew shouldEqual "he" - KeyHindi shouldEqual "hi" - KeyHungarian shouldEqual "hu" - KeyArmenian shouldEqual "hy" - KeyIndonesian shouldEqual "id" - KeyIcelandic shouldEqual "is" - KeyItalian shouldEqual "it" - KeyJapanese shouldEqual "ja" - KeyGeorgian shouldEqual "ka" - KeyKazakh shouldEqual "kk" - KeyKorean shouldEqual "ko" - KeyKyrgyz shouldEqual "ky" - KeyLithuanian shouldEqual "lt" - KeyMaori shouldEqual "mi" - KeyMongolian shouldEqual "mn" - KeyMarathi shouldEqual "mr" - KeyMalay shouldEqual "ms" - KeyMaltese shouldEqual "mt" - KeyNorwegian shouldEqual "nb" - KeyDutch shouldEqual "nl" - KeyNorthernSotho shouldEqual "ns" - KeyPolish shouldEqual "pl" - KeyPashto shouldEqual "ps" - KeyPortuguese shouldEqual "pt" - KeyQuechua shouldEqual "qu" - KeyRomanian shouldEqual "ro" - KeyRussian shouldEqual "ru" - KeySlovak shouldEqual "sk" - KeyAlbanian shouldEqual "sq" - KeySwedish shouldEqual "sv" - KeySwahili shouldEqual "sw" - KeyTamil shouldEqual "ta" - KeyTelugu shouldEqual "te" - KeyTagalog shouldEqual "tl" - KeyTswana shouldEqual "tn" - KeyTurkish shouldEqual "tr" - KeyTatar shouldEqual "tt" - - RouteIndexesV1 shouldEqual "1/indexes" - RouteSettings shouldEqual "settings" - RouteClustersV1 shouldEqual "1/clusters" - RouteSynonyms shouldEqual "synonyms" - RouteEventsV1 shouldEqual "1/events" - RouteABTestsV2 shouldEqual "2/abtests" - RouteRules shouldEqual "rules" - RouteKeysV1 shouldEqual "1/keys" - RouteLogs shouldEqual "1/logs" + KeyLanguage shouldEqual "language" + KeyCity shouldEqual "city" + KeyCountry shouldEqual "country" + KeyAddress shouldEqual "address" + KeyBusStop shouldEqual "busStop" + KeyTrainStation shouldEqual "trainStation" + KeyTownhall shouldEqual "townhall" + KeyAirport shouldEqual "airport" + KeyLocaleNames shouldEqual "locale_names" + KeyCounty shouldEqual "county" + KeyAdministrative shouldEqual "administrative" + KeyCountryCode shouldEqual "country_code" + KeyPostCode shouldEqual "postcode" + KeyPopulation shouldEqual "population" + Key_Geoloc shouldEqual "_geoloc" + KeyIs_Country shouldEqual "is_country" + KeyIs_City shouldEqual "is_city" + KeyIs_Popular shouldEqual "is_popular" + KeyIs_Highway shouldEqual "is_highway" + KeyIs_Suburb shouldEqual "is_suburb" + KeyImportance shouldEqual "importance" + Key_Tags shouldEqual "_tags" + KeyAdmin_Level shouldEqual "admin_level" + KeyDistrict shouldEqual "district" + KeyDegradedQuery shouldEqual "degradedQuery" + KeyGeoPoint shouldEqual "geoPoint" + KeyVillage shouldEqual "village" + KeySimilarQuery shouldEqual "similarQuery" + KeyEnableABTest shouldEqual "enableABTest" } } \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/TestLanguages.kt b/src/commonTest/kotlin/serialize/TestLanguages.kt new file mode 100644 index 000000000..802e880cf --- /dev/null +++ b/src/commonTest/kotlin/serialize/TestLanguages.kt @@ -0,0 +1,69 @@ +package serialize + +import com.algolia.search.serialize.* +import shouldEqual +import kotlin.test.Test + + +internal class TestLanguages { + + @Test + fun test() { + KeyAfrikaans shouldEqual "af" + KeyArabic shouldEqual "ar" + KeyAzeri shouldEqual "az" + KeyBulgarian shouldEqual "bg" + KeyBrunei shouldEqual "bn" + KeyCatalan shouldEqual "ca" + KeyCzech shouldEqual "cs" + KeyWelsh shouldEqual "cy" + KeyDanish shouldEqual "da" + KeyGerman shouldEqual "de" + KeyEnglish shouldEqual "en" + KeyEsperanto shouldEqual "eo" + KeySpanish shouldEqual "es" + KeyEstonian shouldEqual "et" + KeyBasque shouldEqual "eu" + KeyFinnish shouldEqual "fi" + KeyFaroese shouldEqual "fo" + KeyFrench shouldEqual "fr" + KeyGalician shouldEqual "gl" + KeyHebrew shouldEqual "he" + KeyHindi shouldEqual "hi" + KeyHungarian shouldEqual "hu" + KeyArmenian shouldEqual "hy" + KeyIndonesian shouldEqual "id" + KeyIcelandic shouldEqual "is" + KeyItalian shouldEqual "it" + KeyJapanese shouldEqual "ja" + KeyGeorgian shouldEqual "ka" + KeyKazakh shouldEqual "kk" + KeyKorean shouldEqual "ko" + KeyKyrgyz shouldEqual "ky" + KeyLithuanian shouldEqual "lt" + KeyMaori shouldEqual "mi" + KeyMongolian shouldEqual "mn" + KeyMarathi shouldEqual "mr" + KeyMalay shouldEqual "ms" + KeyMaltese shouldEqual "mt" + KeyNorwegian shouldEqual "nb" + KeyDutch shouldEqual "nl" + KeyNorthernSotho shouldEqual "ns" + KeyPolish shouldEqual "pl" + KeyPashto shouldEqual "ps" + KeyPortuguese shouldEqual "pt" + KeyQuechua shouldEqual "qu" + KeyRomanian shouldEqual "ro" + KeyRussian shouldEqual "ru" + KeySlovak shouldEqual "sk" + KeyAlbanian shouldEqual "sq" + KeySwedish shouldEqual "sv" + KeySwahili shouldEqual "sw" + KeyTamil shouldEqual "ta" + KeyTelugu shouldEqual "te" + KeyTagalog shouldEqual "tl" + KeyTswana shouldEqual "tn" + KeyTurkish shouldEqual "tr" + KeyTatar shouldEqual "tt" + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/TestRoutes.kt b/src/commonTest/kotlin/serialize/TestRoutes.kt new file mode 100644 index 000000000..035d7195b --- /dev/null +++ b/src/commonTest/kotlin/serialize/TestRoutes.kt @@ -0,0 +1,22 @@ +package serialize + +import com.algolia.search.serialize.* +import shouldEqual +import kotlin.test.Test + + +internal class TestRoutes { + + @Test + fun test() { + RouteIndexesV1 shouldEqual "1/indexes" + RouteSettings shouldEqual "settings" + RouteClustersV1 shouldEqual "1/clusters" + RouteSynonyms shouldEqual "synonyms" + RouteEventsV1 shouldEqual "1/events" + RouteABTestsV2 shouldEqual "2/abtests" + RouteRules shouldEqual "rules" + RouteKeysV1 shouldEqual "1/keys" + RouteLogs shouldEqual "1/logs" + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/places/TestCountries.kt b/src/commonTest/kotlin/serialize/places/TestCountries.kt new file mode 100644 index 000000000..581878445 --- /dev/null +++ b/src/commonTest/kotlin/serialize/places/TestCountries.kt @@ -0,0 +1,263 @@ +package serialize.places + +import com.algolia.search.model.places.Country +import com.algolia.search.model.places.Country.* +import com.algolia.search.serialize.* +import kotlinx.serialization.json.JsonLiteral +import serialize.TestSerializer + + +internal class TestCountries : TestSerializer(Country) { + + override val items = listOf( + Afghanistan to JsonLiteral(KeyAfghanistan), + AlandIslands to JsonLiteral(KeyAlandIslands), + Albania to JsonLiteral(KeyAlbania), + Algeria to JsonLiteral(KeyAlgeria), + AmericanSamoa to JsonLiteral(KeyAmericanSamoa), + Andorra to JsonLiteral(KeyAndorra), + Angola to JsonLiteral(KeyAngola), + Anguilla to JsonLiteral(KeyAnguilla), + Antarctica to JsonLiteral(KeyAntarctica), + AntiguaAndBarbuda to JsonLiteral(KeyAntiguaAndBarbuda), + Argentina to JsonLiteral(KeyArgentina), + Armenia to JsonLiteral(KeyArmenia), + Aruba to JsonLiteral(KeyAruba), + Australia to JsonLiteral(KeyAustralia), + Austria to JsonLiteral(KeyAustria), + Azerbaijan to JsonLiteral(KeyAzerbaijan), + Bahamas to JsonLiteral(KeyBahamas), + Bahrain to JsonLiteral(KeyBahrain), + Bangladesh to JsonLiteral(KeyBangladesh), + Barbados to JsonLiteral(KeyBarbados), + Belarus to JsonLiteral(KeyBelarus), + Belgium to JsonLiteral(KeyBelgium), + Belize to JsonLiteral(KeyBelize), + Benin to JsonLiteral(KeyBenin), + Bermuda to JsonLiteral(KeyBermuda), + Bhutan to JsonLiteral(KeyBhutan), + Bolivia to JsonLiteral(KeyBolivia), + CaribbeanNetherlands to JsonLiteral(KeyCaribbeanNetherlands), + BosniaAndHerzegovina to JsonLiteral(KeyBosniaAndHerzegovina), + Botswana to JsonLiteral(KeyBotswana), + BouvetIsland to JsonLiteral(KeyBouvetIsland), + Brazil to JsonLiteral(KeyBrazil), + BritishIndianOceanTerritory to JsonLiteral(KeyBritishIndianOceanTerritory), + BruneiDarussalam to JsonLiteral(KeyBruneiDarussalam), + Bulgaria to JsonLiteral(KeyBulgaria), + BurkinaFaso to JsonLiteral(KeyBurkinaFaso), + Burundi to JsonLiteral(KeyBurundi), + CaboVerde to JsonLiteral(KeyCaboVerde), + Cambodia to JsonLiteral(KeyCambodia), + Cameroon to JsonLiteral(KeyCameroon), + Canada to JsonLiteral(KeyCanada), + CaymanIslands to JsonLiteral(KeyCaymanIslands), + CentralAfricanRepublic to JsonLiteral(KeyCentralAfricanRepublic), + Chad to JsonLiteral(KeyChad), + Chile to JsonLiteral(KeyChile), + China to JsonLiteral(KeyChina), + ChristmasIsland to JsonLiteral(KeyChristmasIsland), + CocosIslands to JsonLiteral(KeyCocosIslands), + Colombia to JsonLiteral(KeyColombia), + Comoros to JsonLiteral(KeyComoros), + RepublicOfTheCongo to JsonLiteral(KeyRepublicOfTheCongo), + DemocraticRepublicOfTheCongo to JsonLiteral(KeyDemocraticRepublicOfTheCongo), + CookIslands to JsonLiteral(KeyCookIslands), + CostaRica to JsonLiteral(KeyCostaRica), + IvoryCoast to JsonLiteral(KeyIvoryCoast), + Croatia to JsonLiteral(KeyCroatia), + Cuba to JsonLiteral(KeyCuba), + Curacao to JsonLiteral(KeyCuracao), + Cyprus to JsonLiteral(KeyCyprus), + CzechRepublic to JsonLiteral(KeyCzechRepublic), + Denmark to JsonLiteral(KeyDenmark), + Djibouti to JsonLiteral(KeyDjibouti), + Dominica to JsonLiteral(KeyDominica), + DominicanRepublic to JsonLiteral(KeyDominicanRepublic), + Ecuador to JsonLiteral(KeyEcuador), + Egypt to JsonLiteral(KeyEgypt), + ElSalvador to JsonLiteral(KeyElSalvador), + EquatorialGuinea to JsonLiteral(KeyEquatorialGuinea), + Eritrea to JsonLiteral(KeyEritrea), + Estonia to JsonLiteral(KeyEstonia), + Eswatini to JsonLiteral(KeyEswatini), + Ethiopia to JsonLiteral(KeyEthiopia), + FalklandIslands to JsonLiteral(KeyFalklandIslands), + FaroeIslands to JsonLiteral(KeyFaroeIslands), + Fiji to JsonLiteral(KeyFiji), + Finland to JsonLiteral(KeyFinland), + France to JsonLiteral(KeyFrance), + FrenchGuiana to JsonLiteral(KeyFrenchGuiana), + FrenchPolynesia to JsonLiteral(KeyFrenchPolynesia), + FrenchSouthernAndAntarcticLands to JsonLiteral(KeyFrenchSouthernAndAntarcticLands), + Gabon to JsonLiteral(KeyGabon), + Gambia to JsonLiteral(KeyGambia), + Georgia to JsonLiteral(KeyGeorgia), + Germany to JsonLiteral(KeyGermany), + Ghana to JsonLiteral(KeyGhana), + Gibraltar to JsonLiteral(KeyGibraltar), + Greece to JsonLiteral(KeyGreece), + Greenland to JsonLiteral(KeyGreenland), + Grenada to JsonLiteral(KeyGrenada), + Guadeloupe to JsonLiteral(KeyGuadeloupe), + Guam to JsonLiteral(KeyGuam), + Guatemala to JsonLiteral(KeyGuatemala), + BailiwickOfGuernsey to JsonLiteral(KeyBailiwickOfGuernsey), + Guinea to JsonLiteral(KeyGuinea), + GuineaBissau to JsonLiteral(KeyGuineaBissau), + Guyana to JsonLiteral(KeyGuyana), + Haiti to JsonLiteral(KeyHaiti), + HeardIslandAndMcDonaldIslands to JsonLiteral(KeyHeardIslandAndMcDonaldIslands), + VaticanCity to JsonLiteral(KeyVaticanCity), + Honduras to JsonLiteral(KeyHonduras), + HongKong to JsonLiteral(KeyHongKong), + Hungary to JsonLiteral(KeyHungary), + Iceland to JsonLiteral(KeyIceland), + India to JsonLiteral(KeyIndia), + Indonesia to JsonLiteral(KeyIndonesia), + Iran to JsonLiteral(KeyIran), + Iraq to JsonLiteral(KeyIraq), + Ireland to JsonLiteral(KeyIreland), + IsleOfMan to JsonLiteral(KeyIsleOfMan), + Israel to JsonLiteral(KeyIsrael), + Italy to JsonLiteral(KeyItaly), + Jamaica to JsonLiteral(KeyJamaica), + Japan to JsonLiteral(KeyJapan), + Jersey to JsonLiteral(KeyJersey), + Jordan to JsonLiteral(KeyJordan), + Kazakhstan to JsonLiteral(KeyKazakhstan), + Kenya to JsonLiteral(KeyKenya), + Kiribati to JsonLiteral(KeyKiribati), + NorthKorea to JsonLiteral(KeyNorthKorea), + SouthKorea to JsonLiteral(KeySouthKorea), + Kuwait to JsonLiteral(KeyKuwait), + Kyrgyzstan to JsonLiteral(KeyKyrgyzstan), + Laos to JsonLiteral(KeyLaos), + Latvia to JsonLiteral(KeyLatvia), + Lebanon to JsonLiteral(KeyLebanon), + Lesotho to JsonLiteral(KeyLesotho), + Liberia to JsonLiteral(KeyLiberia), + Libya to JsonLiteral(KeyLibya), + Liechtenstein to JsonLiteral(KeyLiechtenstein), + Lithuania to JsonLiteral(KeyLithuania), + Luxembourg to JsonLiteral(KeyLuxembourg), + Macau to JsonLiteral(KeyMacau), + Madagascar to JsonLiteral(KeyMadagascar), + Malawi to JsonLiteral(KeyMalawi), + Malaysia to JsonLiteral(KeyMalaysia), + Maldives to JsonLiteral(KeyMaldives), + Mali to JsonLiteral(KeyMali), + Malta to JsonLiteral(KeyMalta), + MarshallIslands to JsonLiteral(KeyMarshallIslands), + Martinique to JsonLiteral(KeyMartinique), + Mauritania to JsonLiteral(KeyMauritania), + Mauritius to JsonLiteral(KeyMauritius), + Mayotte to JsonLiteral(KeyMayotte), + Mexico to JsonLiteral(KeyMexico), + Micronesia to JsonLiteral(KeyMicronesia), + Moldova to JsonLiteral(KeyMoldova), + Monaco to JsonLiteral(KeyMonaco), + Mongolia to JsonLiteral(KeyMongolia), + Montenegro to JsonLiteral(KeyMontenegro), + Montserrat to JsonLiteral(KeyMontserrat), + Morocco to JsonLiteral(KeyMorocco), + Mozambique to JsonLiteral(KeyMozambique), + Myanmar to JsonLiteral(KeyMyanmar), + Namibia to JsonLiteral(KeyNamibia), + Nauru to JsonLiteral(KeyNauru), + Nepal to JsonLiteral(KeyNepal), + Netherlands to JsonLiteral(KeyNetherlands), + NewCaledonia to JsonLiteral(KeyNewCaledonia), + NewZealand to JsonLiteral(KeyNewZealand), + Nicaragua to JsonLiteral(KeyNicaragua), + Niger to JsonLiteral(KeyNiger), + Nigeria to JsonLiteral(KeyNigeria), + Niue to JsonLiteral(KeyNiue), + NorfolkIsland to JsonLiteral(KeyNorfolkIsland), + NorthMacedonia to JsonLiteral(KeyNorthMacedonia), + NorthernMarianaIslands to JsonLiteral(KeyNorthernMarianaIslands), + Norway to JsonLiteral(KeyNorway), + Oman to JsonLiteral(KeyOman), + Pakistan to JsonLiteral(KeyPakistan), + Palau to JsonLiteral(KeyPalau), + Palestine to JsonLiteral(KeyPalestine), + Panama to JsonLiteral(KeyPanama), + PapuaNewGuinea to JsonLiteral(KeyPapuaNewGuinea), + Paraguay to JsonLiteral(KeyParaguay), + Peru to JsonLiteral(KeyPeru), + Philippines to JsonLiteral(KeyPhilippines), + PitcairnIslands to JsonLiteral(KeyPitcairnIslands), + Poland to JsonLiteral(KeyPoland), + Portugal to JsonLiteral(KeyPortugal), + PuertoRico to JsonLiteral(KeyPuertoRico), + Qatar to JsonLiteral(KeyQatar), + Reunion to JsonLiteral(KeyReunion), + Romania to JsonLiteral(KeyRomania), + Russia to JsonLiteral(KeyRussia), + Rwanda to JsonLiteral(KeyRwanda), + SaintBarthelemy to JsonLiteral(KeySaintBarthelemy), + SaintHelena to JsonLiteral(KeySaintHelena), + SaintKittsAndNevis to JsonLiteral(KeySaintKittsAndNevis), + SaintLucia to JsonLiteral(KeySaintLucia), + SaintMartin to JsonLiteral(KeySaintMartin), + SaintPierreAndMiquelon to JsonLiteral(KeySaintPierreAndMiquelon), + SaintVincentAndTheGrenadines to JsonLiteral(KeySaintVincentAndTheGrenadines), + Samoa to JsonLiteral(KeySamoa), + SanMarino to JsonLiteral(KeySanMarino), + SaoTomeAndPrincipe to JsonLiteral(KeySaoTomeAndPrincipe), + SaudiArabia to JsonLiteral(KeySaudiArabia), + Senegal to JsonLiteral(KeySenegal), + Serbia to JsonLiteral(KeySerbia), + Seychelles to JsonLiteral(KeySeychelles), + SierraLeone to JsonLiteral(KeySierraLeone), + Singapore to JsonLiteral(KeySingapore), + SintMaarten to JsonLiteral(KeySintMaarten), + Slovakia to JsonLiteral(KeySlovakia), + Slovenia to JsonLiteral(KeySlovenia), + SolomonIslands to JsonLiteral(KeySolomonIslands), + Somalia to JsonLiteral(KeySomalia), + SouthAfrica to JsonLiteral(KeySouthAfrica), + SouthGeorgiaAndTheSouthSandwichIslands to JsonLiteral(KeySouthGeorgiaAndTheSouthSandwichIslands), + SouthSudan to JsonLiteral(KeySouthSudan), + Spain to JsonLiteral(KeySpain), + SriLanka to JsonLiteral(KeySriLanka), + Sudan to JsonLiteral(KeySudan), + Suriname to JsonLiteral(KeySuriname), + SvalbardAndJanMayen to JsonLiteral(KeySvalbardAndJanMayen), + Sweden to JsonLiteral(KeySweden), + Switzerland to JsonLiteral(KeySwitzerland), + Syria to JsonLiteral(KeySyria), + Taiwan to JsonLiteral(KeyTaiwan), + Tajikistan to JsonLiteral(KeyTajikistan), + Tanzania to JsonLiteral(KeyTanzania), + Thailand to JsonLiteral(KeyThailand), + TimorLeste to JsonLiteral(KeyTimorLeste), + Togo to JsonLiteral(KeyTogo), + Tokelau to JsonLiteral(KeyTokelau), + Tonga to JsonLiteral(KeyTonga), + TrinidadAndTobago to JsonLiteral(KeyTrinidadAndTobago), + Tunisia to JsonLiteral(KeyTunisia), + Turkey to JsonLiteral(KeyTurkey), + Turkmenistan to JsonLiteral(KeyTurkmenistan), + TurksAndCaicosIslands to JsonLiteral(KeyTurksAndCaicosIslands), + Tuvalu to JsonLiteral(KeyTuvalu), + Uganda to JsonLiteral(KeyUganda), + Ukraine to JsonLiteral(KeyUkraine), + UnitedArabEmirates to JsonLiteral(KeyUnitedArabEmirates), + UnitedKingdom to JsonLiteral(KeyUnitedKingdom), + UnitedStates to JsonLiteral(KeyUnitedStates), + UnitedStatesMinorOutlyingIslands to JsonLiteral(KeyUnitedStatesMinorOutlyingIslands), + Uruguay to JsonLiteral(KeyUruguay), + Uzbekistan to JsonLiteral(KeyUzbekistan), + Vanuatu to JsonLiteral(KeyVanuatu), + Venezuela to JsonLiteral(KeyVenezuela), + Vietnam to JsonLiteral(KeyVietnam), + VirginIslandsGB to JsonLiteral(KeyVirginIslandsGB), + VirginIslandsUS to JsonLiteral(KeyVirginIslandsUS), + WallisAndFutuna to JsonLiteral(KeyWallisAndFutuna), + WesternSahara to JsonLiteral(KeyWesternSahara), + Yemen to JsonLiteral(KeyYemen), + Zambia to JsonLiteral(KeyZambia), + Zimbabwe to JsonLiteral(KeyZimbabwe) + ) +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/search/TestIgnorePlurals.kt b/src/commonTest/kotlin/serialize/search/TestIgnorePlurals.kt index ee0046007..7f131dd03 100644 --- a/src/commonTest/kotlin/serialize/search/TestIgnorePlurals.kt +++ b/src/commonTest/kotlin/serialize/search/TestIgnorePlurals.kt @@ -1,7 +1,7 @@ package serialize.search import com.algolia.search.model.search.IgnorePlurals -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import kotlinx.serialization.json.JsonLiteral import kotlinx.serialization.json.jsonArray import serialize.TestSerializer @@ -13,11 +13,11 @@ internal class TestIgnorePlurals : TestSerializer(IgnorePlurals) IgnorePlurals.True to JsonLiteral(true), IgnorePlurals.False to JsonLiteral(false), IgnorePlurals.QueryLanguages( - QueryLanguage.Afrikaans, - QueryLanguage.Albanian + Language.Afrikaans, + Language.Albanian ) to jsonArray { - +QueryLanguage.Afrikaans.raw - +QueryLanguage.Albanian.raw + +Language.Afrikaans.raw + +Language.Albanian.raw } ) } \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/search/TestQueryLanguage.kt b/src/commonTest/kotlin/serialize/search/TestLanguage.kt similarity index 93% rename from src/commonTest/kotlin/serialize/search/TestQueryLanguage.kt rename to src/commonTest/kotlin/serialize/search/TestLanguage.kt index 897cf6b9f..fc601e293 100644 --- a/src/commonTest/kotlin/serialize/search/TestQueryLanguage.kt +++ b/src/commonTest/kotlin/serialize/search/TestLanguage.kt @@ -1,12 +1,12 @@ package serialize.search -import com.algolia.search.model.search.QueryLanguage -import com.algolia.search.model.search.QueryLanguage.* +import com.algolia.search.model.search.Language +import com.algolia.search.model.search.Language.* import kotlinx.serialization.json.JsonLiteral import serialize.TestSerializer -internal class TestQueryLanguage : TestSerializer(QueryLanguage) { +internal class TestLanguage : TestSerializer(Language) { override val items = listOf( Afrikaans to JsonLiteral(Afrikaans.raw), diff --git a/src/commonTest/kotlin/serialize/search/TestQuery.kt b/src/commonTest/kotlin/serialize/search/TestQuery.kt index 7c24634ca..9b8554ed1 100644 --- a/src/commonTest/kotlin/serialize/search/TestQuery.kt +++ b/src/commonTest/kotlin/serialize/search/TestQuery.kt @@ -62,7 +62,7 @@ internal class TestQuery : TestSerializer(Query.serializer()) { insidePolygon = listOf(TestPolygon.polygon), ignorePlurals = IgnorePlurals.True, removeStopWords = RemoveStopWords.True, - queryLanguages = listOf(QueryLanguage.Afrikaans, QueryLanguage.Albanian), + queryLanguages = listOf(Language.Afrikaans, Language.Albanian), enableRules = boolean, ruleContexts = listOf(string), enablePersonalization = boolean, @@ -86,7 +86,9 @@ internal class TestQuery : TestSerializer(Query.serializer()) { minProximity = int, responseFields = listOf(ResponseFields.NbHits), maxFacetHits = int, - percentileComputation = boolean + percentileComputation = boolean, + similarQuery = string, + enableABTest = boolean ) to json { KeyQuery to string KeyAttributesToRetrieve to attributesJson @@ -126,8 +128,8 @@ internal class TestQuery : TestSerializer(Query.serializer()) { KeyIgnorePlurals to boolean KeyRemoveStopWords to boolean KeyQueryLanguages to jsonArray { - +QueryLanguage.Afrikaans.raw - +QueryLanguage.Albanian.raw + +Language.Afrikaans.raw + +Language.Albanian.raw } KeyEnableRules to boolean KeyRuleContexts to jsonArray { +string } @@ -153,6 +155,8 @@ internal class TestQuery : TestSerializer(Query.serializer()) { KeyResponseFields to jsonArray { +ResponseFields.NbHits.raw } KeyMaxFacetHits to int KeyPercentileComputation to boolean + KeySimilarQuery to string + KeyEnableABTest to boolean } ) diff --git a/src/commonTest/kotlin/serialize/search/TestRemoveStopWords.kt b/src/commonTest/kotlin/serialize/search/TestRemoveStopWords.kt index 36acd91c3..23aeab9d3 100644 --- a/src/commonTest/kotlin/serialize/search/TestRemoveStopWords.kt +++ b/src/commonTest/kotlin/serialize/search/TestRemoveStopWords.kt @@ -1,7 +1,7 @@ package serialize.search -import com.algolia.search.model.search.QueryLanguage.Afrikaans -import com.algolia.search.model.search.QueryLanguage.Albanian +import com.algolia.search.model.search.Language.Afrikaans +import com.algolia.search.model.search.Language.Albanian import com.algolia.search.model.search.RemoveStopWords import kotlinx.serialization.json.JsonLiteral import kotlinx.serialization.json.jsonArray diff --git a/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoint.kt b/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoint.kt new file mode 100644 index 000000000..93c2eabed --- /dev/null +++ b/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoint.kt @@ -0,0 +1,25 @@ +package serialize.serializer + +import com.algolia.search.model.search.Point +import com.algolia.search.serialize.KSerializerGeoPoint +import com.algolia.search.serialize.KeyLat +import com.algolia.search.serialize.KeyLng +import kotlinx.serialization.json.json +import serialize.TestSerializer + + +internal class TestKSerializerGeoPoint : TestSerializer(KSerializerGeoPoint) { + + override val items = listOf( + point to json + ) + + companion object { + + val json = json { + KeyLat to 0f + KeyLng to 1f + } + val point = Point(latitude = 0f, longitude = 1f) + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoints.kt b/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoints.kt new file mode 100644 index 000000000..296750e96 --- /dev/null +++ b/src/commonTest/kotlin/serialize/serializer/TestKSerializerGeoPoints.kt @@ -0,0 +1,24 @@ +package serialize.serializer + +import com.algolia.search.model.search.Point +import com.algolia.search.serialize.Json +import com.algolia.search.serialize.KSerializerGeoPoints +import kotlinx.serialization.json.jsonArray +import serialize.TestSerializer +import serialize.serializer.TestKSerializerGeoPoint.Companion.json +import serialize.serializer.TestKSerializerGeoPoint.Companion.point +import shouldEqual +import kotlin.test.Test + + +internal class TestKSerializerGeoPoints : TestSerializer>(KSerializerGeoPoints) { + + override val items = listOf( + listOf(point) to jsonArray { +json } + ) + + @Test + fun fromObject() { + Json.fromJson(KSerializerGeoPoints, json) shouldEqual listOf((point)) + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/serialize/settings/TestDecompoundedAttributes.kt b/src/commonTest/kotlin/serialize/settings/TestDecompoundedAttributes.kt index e8ab229c8..a76c8e98a 100644 --- a/src/commonTest/kotlin/serialize/settings/TestDecompoundedAttributes.kt +++ b/src/commonTest/kotlin/serialize/settings/TestDecompoundedAttributes.kt @@ -2,7 +2,7 @@ package serialize.settings import attributeA import attributeB -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import com.algolia.search.model.settings.DecompoundedAttributes import kotlinx.serialization.json.json import kotlinx.serialization.json.jsonArray @@ -16,21 +16,21 @@ internal class TestDecompoundedAttributes : TestSerializer(Settings.serializer()) { camelCaseAttributes = attributes, decompoundedAttributes = listOf(TestDecompoundedAttributes.item), keepDiacriticsOnCharacters = string, - queryLanguages = listOf(QueryLanguage.Afrikaans, QueryLanguage.Albanian), + queryLanguages = listOf(Language.Afrikaans, Language.Albanian), // Query-rules enableRules = boolean, // Query-strategy @@ -81,7 +83,8 @@ internal class TestSettings : TestSerializer(Settings.serializer()) { responseFields = listOf(ResponseFields.NbHits), maxFacetHits = int, version = int, - advancedSyntaxFeatures = listOf(AdvancedSyntaxFeatures.ExcludeWords, AdvancedSyntaxFeatures.ExactPhrase) + advancedSyntaxFeatures = listOf(AdvancedSyntaxFeatures.ExcludeWords, AdvancedSyntaxFeatures.ExactPhrase), + userData = json { unknown to unknown } ) to json { // Attributes KeySearchableAttributes to attributesJson @@ -120,8 +123,8 @@ internal class TestSettings : TestSerializer(Settings.serializer()) { KeyDecompoundedAttributes to jsonArray { +TestDecompoundedAttributes.json } KeyKeepDiacriticsOnCharacters to string KeyQueryLanguages to jsonArray { - +QueryLanguage.Afrikaans.raw - +QueryLanguage.Albanian.raw + +Language.Afrikaans.raw + +Language.Albanian.raw } // Query-rules KeyEnableRules to boolean @@ -129,9 +132,13 @@ internal class TestSettings : TestSerializer(Settings.serializer()) { KeyQueryType to QueryType.PrefixLast.raw KeyRemoveWordsIfNoResults to RemoveWordIfNoResults.LastWords.raw KeyAdvancedSyntax to boolean + KeyAdvancedSyntaxFeatures to jsonArray { + +KeyExcludeWords + +KeyExactPhrase + } KeyOptionalWords to jsonArray { +string } - KeyDisablePrefixOnAttributes to attributesJson KeyDisableExactOnAttributes to attributesJson + KeyDisablePrefixOnAttributes to attributesJson KeyExactOnSingleWordQuery to ExactOnSingleWordQuery.Word.raw KeyAlternativesAsExact to jsonArray { +AlternativesAsExact.IgnorePlurals.raw } // Performance @@ -145,10 +152,8 @@ internal class TestSettings : TestSerializer(Settings.serializer()) { KeyResponseFields to jsonArray { +ResponseFields.NbHits.raw } KeyMaxFacetHits to int KeyVersion to int - KeyAdvancedSyntaxFeatures to jsonArray { - +KeyExcludeWords - +KeyExactPhrase - } + KeyUserData to json { unknown to unknown } + KeyPrimary to JsonNull } ) diff --git a/src/commonTest/kotlin/suite/Extensions.kt b/src/commonTest/kotlin/suite/Extensions.kt index 6c2d6b1f6..61941542c 100644 --- a/src/commonTest/kotlin/suite/Extensions.kt +++ b/src/commonTest/kotlin/suite/Extensions.kt @@ -32,36 +32,7 @@ internal fun compareVariant(actual: ResponseVariant, expected: Variant) { } } -internal suspend fun cleanABTest(clientSearch: ClientSearch, suffix: String, now: Boolean = false) { - val regex = Regex("kotlin-(.*)-$username-$suffix") - - clientAnalytics.browseAllABTests().forEach { - it.abTests.forEach { abTest -> - val result = regex.find(abTest.variantA.indexName.raw) - val date = result?.groupValues?.get(1) - - if (date != null) { - val difference = Time.getCurrentTimeMillis() - DateFormat.parse(date) - - if (difference >= dayInMillis || now) { - try { - val deletion = clientAnalytics.deleteABTest(abTest.abTestID) - - clientSearch.initIndex(deletion.indexName).apply { - deletion.wait() - } - } catch (exception : ResponseException) { - println(exception.readContent()) - } - } - } - } - } -} - internal suspend fun cleanIndex(client: ClientSearch, suffix: String, now: Boolean = false) { - val indexToDelete = mutableListOf() - client.listIndices().items.forEach { val indexName = it.indexName.raw @@ -72,16 +43,17 @@ internal suspend fun cleanIndex(client: ClientSearch, suffix: String, now: Boole val difference = Time.getCurrentTimeMillis() - DateFormat.parse(date) if (difference >= dayInMillis || now) { - indexToDelete += it.indexName + val index = client.initIndex(it.indexName) + if (it.abTestOrNull != null) { + index.apply { + clientAnalytics.deleteABTest(it.abTest.abTestId).wait() + } + } + index.apply { deleteIndex().wait() } } } } } - indexToDelete.forEach { - client.initIndex(it).apply { - deleteIndex().wait() - } - } } diff --git a/src/commonTest/kotlin/suite/TestSuiteAATest.kt b/src/commonTest/kotlin/suite/TestSuiteAATest.kt index 8321c27c4..0c30517b3 100644 --- a/src/commonTest/kotlin/suite/TestSuiteAATest.kt +++ b/src/commonTest/kotlin/suite/TestSuiteAATest.kt @@ -16,7 +16,7 @@ import kotlinx.serialization.json.json import runBlocking import shouldEqual import shouldNotEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -37,10 +37,9 @@ internal class TestSuiteAATest { ) ) - @BeforeTest + @AfterTest fun clean() { runBlocking { - cleanABTest(clientAdmin1, suffix) cleanIndex(clientAdmin1, suffix) } } diff --git a/src/commonTest/kotlin/suite/TestSuiteABTest.kt b/src/commonTest/kotlin/suite/TestSuiteABTest.kt index d574b6af3..f7a7c137f 100644 --- a/src/commonTest/kotlin/suite/TestSuiteABTest.kt +++ b/src/commonTest/kotlin/suite/TestSuiteABTest.kt @@ -18,7 +18,7 @@ import shouldEqual import shouldFailWith import shouldNotBeNull import shouldNotEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -38,10 +38,9 @@ internal class TestSuiteABTest { endAt = ClientDate(Time.getCurrentTimeMillis() + dayInMillis) ) - @BeforeTest + @AfterTest fun clean() { runBlocking { - cleanABTest(clientAdmin1, suffix) cleanIndex(clientAdmin1, suffix) } } diff --git a/src/commonTest/kotlin/suite/TestSuiteAPIKey.kt b/src/commonTest/kotlin/suite/TestSuiteAPIKey.kt index f10bcfb09..71404b900 100644 --- a/src/commonTest/kotlin/suite/TestSuiteAPIKey.kt +++ b/src/commonTest/kotlin/suite/TestSuiteAPIKey.kt @@ -17,7 +17,6 @@ import runBlocking import shouldBeTrue import shouldEqual import kotlin.test.AfterTest -import kotlin.test.Test internal class TestSuiteAPIKey { @@ -35,7 +34,7 @@ internal class TestSuiteAPIKey { validity = 600 ) - @Test + @AfterTest fun test() { runBlocking { clientAdmin1.apply { diff --git a/src/commonTest/kotlin/suite/TestSuiteAccount.kt b/src/commonTest/kotlin/suite/TestSuiteAccount.kt index 3de69b11a..672d79d97 100644 --- a/src/commonTest/kotlin/suite/TestSuiteAccount.kt +++ b/src/commonTest/kotlin/suite/TestSuiteAccount.kt @@ -17,7 +17,7 @@ import runBlocking import shouldBeTrue import shouldEqual import shouldFailWith -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -37,7 +37,7 @@ internal class TestSuiteAccount { Settings(searchableAttributes = listOf(SearchableAttribute.Default("objectID".toAttribute()))) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix1) diff --git a/src/commonTest/kotlin/suite/TestSuiteBatching.kt b/src/commonTest/kotlin/suite/TestSuiteBatching.kt index f1d232eed..7806ac855 100644 --- a/src/commonTest/kotlin/suite/TestSuiteBatching.kt +++ b/src/commonTest/kotlin/suite/TestSuiteBatching.kt @@ -9,7 +9,7 @@ import kotlinx.serialization.list import loadScratch import runBlocking import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -19,7 +19,7 @@ internal class TestSuiteBatching { private val indexName = testSuiteIndexName(suffix) private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteBrowse.kt b/src/commonTest/kotlin/suite/TestSuiteBrowse.kt index bbabe32ce..30350b579 100644 --- a/src/commonTest/kotlin/suite/TestSuiteBrowse.kt +++ b/src/commonTest/kotlin/suite/TestSuiteBrowse.kt @@ -11,7 +11,7 @@ import com.algolia.search.model.task.TaskStatus import kotlinx.serialization.json.json import runBlocking import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -21,7 +21,7 @@ internal class TestSuiteBrowse { private val indexName = testSuiteIndexName(suffix) private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteCopyIndex.kt b/src/commonTest/kotlin/suite/TestSuiteCopyIndex.kt index d59df1400..44ddee203 100644 --- a/src/commonTest/kotlin/suite/TestSuiteCopyIndex.kt +++ b/src/commonTest/kotlin/suite/TestSuiteCopyIndex.kt @@ -14,7 +14,7 @@ import kotlinx.serialization.json.json import runBlocking import shouldBeTrue import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -42,7 +42,7 @@ internal class TestSuiteCopyIndex { ) private val settings = Settings(attributesForFaceting = listOf(AttributeForFaceting.Default(company))) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteDNS.kt b/src/commonTest/kotlin/suite/TestSuiteDNS.kt index d83cf3ec9..04e9b79cf 100644 --- a/src/commonTest/kotlin/suite/TestSuiteDNS.kt +++ b/src/commonTest/kotlin/suite/TestSuiteDNS.kt @@ -2,43 +2,62 @@ package suite import clientAdmin1 import com.algolia.search.client.ClientSearch -import com.algolia.search.configuration.CallType import com.algolia.search.configuration.ConfigurationSearch -import com.algolia.search.configuration.RetryableHost -import com.algolia.search.model.Time +import com.algolia.search.model.IndexName +import com.algolia.search.model.response.ResponseSearch +import com.algolia.search.serialize.Json +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respond import io.ktor.client.features.logging.LogLevel +import io.ktor.http.ContentType +import io.ktor.http.headersOf +import kotlinx.coroutines.delay +import kotlinx.coroutines.io.ByteReadChannel import runBlocking +import shouldBeFalse +import shouldBeTrue +import shouldEqual import kotlin.test.Test internal class TestSuiteDNS { + private val readTimeout = 500L + private val shouldTimeout = 600L + private val shouldNotTimeout = 400L + private var requestCount = 0 + private val mockEngine = MockEngine { + val delay = if (requestCount == 0) shouldTimeout else shouldNotTimeout + + requestCount++ + delay(delay) + content + } + + private val content = respond( + headers = headersOf( + "Content-Type", + listOf(ContentType.Application.Json.toString()) + ), + content = ByteReadChannel(Json.stringify(ResponseSearch.serializer(), ResponseSearch())) + ) + private val client = ClientSearch( + ConfigurationSearch( + clientAdmin1.applicationID, + clientAdmin1.apiKey, + readTimeout = readTimeout, + engine = mockEngine, + logLevel = LogLevel.INFO + ) + ) + @Test fun test() { runBlocking { - val applicationID = clientAdmin1.applicationID - - val client = ClientSearch( - ConfigurationSearch( - applicationID, - clientAdmin1.apiKey, - hosts = listOf( - RetryableHost("algolia.biz", CallType.Read), - RetryableHost("$applicationID-1.algolianet.com"), - RetryableHost("$applicationID-2.algolianet.com"), - RetryableHost("$applicationID-3.algolianet.com") - ), - logLevel = LogLevel.INFO - ) - ) - val timer = Time.getCurrentTimeMillis() - - client.apply { - repeat(10) { - listIndices() - } - } - println("Time elapsed in milliseconds: ${(Time.getCurrentTimeMillis() - timer)}") + val index = client.initIndex(IndexName("test")) + + index.search() + client.transport.hosts.first().retryCount shouldEqual 1 } } } \ No newline at end of file diff --git a/src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt b/src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt index abf02f685..ff28b5f8d 100644 --- a/src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt +++ b/src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt @@ -16,7 +16,7 @@ import runBlocking import shouldBeTrue import shouldEqual import shouldNotBeNull -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -26,7 +26,7 @@ internal class TestSuiteDisjunctive { private val indexName = testSuiteIndexName(suffix) private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteIndexExists.kt b/src/commonTest/kotlin/suite/TestSuiteIndexExists.kt new file mode 100644 index 000000000..eb38ef803 --- /dev/null +++ b/src/commonTest/kotlin/suite/TestSuiteIndexExists.kt @@ -0,0 +1,35 @@ +package suite + +import clientAdmin1 +import kotlinx.serialization.json.json +import runBlocking +import shouldBeFalse +import shouldBeTrue +import kotlin.test.BeforeTest +import kotlin.test.Test + + +internal class TestSuiteIndexExists { + + private val suffix = "exists" + private val indexName = testSuiteIndexName(suffix) + private val index = clientAdmin1.initIndex(indexName) + + @BeforeTest + fun clean() { + runBlocking { + cleanIndex(clientAdmin1, suffix) + } + } + + @Test + fun test() { + runBlocking { + index.apply { + exists().shouldBeFalse() + saveObject(json { "Key" to "Value" }).wait() + exists().shouldBeTrue() + } + } + } +} \ No newline at end of file diff --git a/src/commonTest/kotlin/suite/TestSuiteIndexing.kt b/src/commonTest/kotlin/suite/TestSuiteIndexing.kt index 24f6e5276..903bebb91 100644 --- a/src/commonTest/kotlin/suite/TestSuiteIndexing.kt +++ b/src/commonTest/kotlin/suite/TestSuiteIndexing.kt @@ -15,7 +15,7 @@ import kotlinx.serialization.json.json import runBlocking import shouldBeTrue import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -53,7 +53,7 @@ internal class TestSuiteIndexing { } } - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteInsights.kt b/src/commonTest/kotlin/suite/TestSuiteInsights.kt index aab6ed438..9d0206f3d 100644 --- a/src/commonTest/kotlin/suite/TestSuiteInsights.kt +++ b/src/commonTest/kotlin/suite/TestSuiteInsights.kt @@ -6,6 +6,7 @@ import com.algolia.search.helper.toAttribute import com.algolia.search.helper.toEventName import com.algolia.search.helper.toObjectID import com.algolia.search.helper.toUserToken +import com.algolia.search.model.Time import com.algolia.search.model.filter.Filter import com.algolia.search.model.insights.InsightsEvent import com.algolia.search.model.search.Query @@ -16,23 +17,25 @@ import io.ktor.http.HttpStatusCode import kotlinx.serialization.json.json import runBlocking import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test internal class TestSuiteInsights { + private val twoDaysInMillis = 172800000 private val suffix = "insights" private val indexName = testSuiteIndexName(suffix) private val index = clientAdmin1.initIndex(indexName) private val userToken = "bar".toUserToken() private val eventName = "eventName".toEventName() - private val objectIDs = listOf("obj1".toObjectID(), "obj2".toObjectID()) + private val objectIDs = listOf("one".toObjectID(), "two".toObjectID()) private val eventClick = InsightsEvent.Click( eventName = "foo".toEventName(), userToken = userToken, indexName = indexName, - resources = InsightsEvent.Resources.ObjectIDs(objectIDs) + resources = InsightsEvent.Resources.ObjectIDs(objectIDs), + timestamp = Time.getCurrentTimeMillis() - twoDaysInMillis ) private val user = clientInsights.User(userToken) private val attribute = "dsl/filtering".toAttribute() @@ -41,7 +44,7 @@ internal class TestSuiteInsights { Filter.Facet(attribute, "bar") ) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteMultipleOperations.kt b/src/commonTest/kotlin/suite/TestSuiteMultipleOperations.kt index 16a654fca..161c4e542 100644 --- a/src/commonTest/kotlin/suite/TestSuiteMultipleOperations.kt +++ b/src/commonTest/kotlin/suite/TestSuiteMultipleOperations.kt @@ -14,7 +14,7 @@ import kotlinx.serialization.json.json import runBlocking import shouldBeTrue import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -27,7 +27,7 @@ internal class TestSuiteMultipleOperations { private val jimmie = "Jimmie" private val json = json { firstname to jimmie } - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuitePlaces.kt b/src/commonTest/kotlin/suite/TestSuitePlaces.kt new file mode 100644 index 000000000..93535f4ff --- /dev/null +++ b/src/commonTest/kotlin/suite/TestSuitePlaces.kt @@ -0,0 +1,126 @@ +package suite + +import clientPlaces +import com.algolia.search.model.ObjectID +import com.algolia.search.model.places.Country +import com.algolia.search.model.places.PlaceType +import com.algolia.search.model.places.PlacesQuery +import com.algolia.search.model.search.AroundRadius +import com.algolia.search.model.search.Language +import com.algolia.search.model.search.Point +import runBlocking +import shouldEqual +import shouldNotBeEmpty +import kotlin.test.Test + + +internal class TestSuitePlaces { + + + @Test + fun withoutParameters() { + runBlocking { + clientPlaces.searchPlaces().hits.shouldNotBeEmpty() + } + } + + @Test + fun withLanguage() { + runBlocking { + clientPlaces.searchPlaces(Language.English).hits.shouldNotBeEmpty() + } + } + + @Test + fun withRankingInfo() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery(getRankingInfo = true)).hits.shouldNotBeEmpty() + } + } + + @Test + fun withQuery() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery("New-York")).hits.shouldNotBeEmpty() + } + } + + @Test + fun withCountry() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery(countries = listOf(Country.UnitedStates))).hits.shouldNotBeEmpty() + } + } + + @Test + fun withType() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.Country)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.City)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.TownHall)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.TrainStation)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.BusStop)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.Address)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(type = PlaceType.Airport)).hits.shouldNotBeEmpty() + } + } + + @Test + fun withGeo() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery(aroundRadius = AroundRadius.All)).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(aroundRadius = AroundRadius.InMeters(1000000))).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(aroundLatLng = Point(0f, 0f))).hits.shouldNotBeEmpty() + clientPlaces.searchPlaces(PlacesQuery(aroundLatLngViaIP = true)).hits.shouldNotBeEmpty() + } + } + + @Test + fun withAllParameters() { + runBlocking { + val query = PlacesQuery( + query = "Paris", + type = PlaceType.City, + hitsPerPage = 10, + aroundLatLngViaIP = false, + aroundLatLng = Point(32.7767f, -96.7970f), + countries = listOf(Country.France, Country.UnitedStates) + ) + clientPlaces.searchPlaces(Language.English, query).hits.shouldNotBeEmpty() + } + } + + @Test + fun getByObjectID() { + runBlocking { + clientPlaces.getByObjectID(ObjectID("141420484_278859695")) + } + } + + @Test + fun reverseGeocoding() { + runBlocking { + clientPlaces.reverseGeocoding( + Point(48.880379f, 2.327007f), hitsPerPage = 5 + ).hits.size shouldEqual 5 + } + } + + @Test + fun reverseGeocodingLanguage() { + runBlocking { + clientPlaces.reverseGeocoding( + Language.French, + Point(48.880379f, 2.327007f), + hitsPerPage = 5 + ).hits.size shouldEqual 5 + } + } + + @Test + fun hitsPerPage() { + runBlocking { + clientPlaces.searchPlaces(PlacesQuery(hitsPerPage = 5)).hits.size shouldEqual 5 + } + } +} diff --git a/src/commonTest/kotlin/suite/TestSuiteReplaceAll.kt b/src/commonTest/kotlin/suite/TestSuiteReplaceAll.kt index a0edb4374..e1b85cc89 100644 --- a/src/commonTest/kotlin/suite/TestSuiteReplaceAll.kt +++ b/src/commonTest/kotlin/suite/TestSuiteReplaceAll.kt @@ -14,7 +14,7 @@ import runBlocking import shouldBeTrue import shouldEqual import shouldFailWith -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -26,7 +26,7 @@ class TestSuiteReplaceAll { private val objectIDOne = "one".toObjectID() private val objectIDTwo = "two".toObjectID() - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteRules.kt b/src/commonTest/kotlin/suite/TestSuiteRules.kt index e405c46d0..c80c42aaa 100644 --- a/src/commonTest/kotlin/suite/TestSuiteRules.kt +++ b/src/commonTest/kotlin/suite/TestSuiteRules.kt @@ -15,7 +15,7 @@ import runBlocking import shouldEqual import shouldFailWith import shouldNotBeNull -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -26,7 +26,7 @@ internal class TestSuiteRules { private val brand = "brand".toAttribute() private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteSearch.kt b/src/commonTest/kotlin/suite/TestSuiteSearch.kt index 758157cf7..44710a802 100644 --- a/src/commonTest/kotlin/suite/TestSuiteSearch.kt +++ b/src/commonTest/kotlin/suite/TestSuiteSearch.kt @@ -16,7 +16,7 @@ import shouldContain import shouldEqual import shouldNotBeEmpty import shouldNotBeNull -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -29,7 +29,7 @@ internal class TestSuiteSearch { private val index = clientAdmin1.initIndex(indexName) private val search = clientSearch.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/suite/TestSuiteSettings.kt b/src/commonTest/kotlin/suite/TestSuiteSettings.kt index 7b34ed140..4aad3ef7e 100644 --- a/src/commonTest/kotlin/suite/TestSuiteSettings.kt +++ b/src/commonTest/kotlin/suite/TestSuiteSettings.kt @@ -2,15 +2,16 @@ package suite import clientAdmin1 import com.algolia.search.model.search.IgnorePlurals -import com.algolia.search.model.search.QueryLanguage +import com.algolia.search.model.search.Language import com.algolia.search.model.search.RemoveStopWords import com.algolia.search.model.search.TypoTolerance import com.algolia.search.model.settings.Distinct import com.algolia.search.model.settings.Settings import com.algolia.search.model.task.TaskStatus +import kotlinx.serialization.json.json import runBlocking import shouldEqual -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -20,7 +21,7 @@ internal class TestSuiteSettings { private val indexName = testSuiteIndexName(suffix) private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) @@ -33,17 +34,21 @@ internal class TestSuiteSettings { val settings = load(Settings.serializer(), "settings.json") index.apply { + saveObject(json { "value" to 42 }) setSettings(settings).wait() shouldEqual TaskStatus.Published getSettings() shouldEqual settings val copy = settings.copy( typoTolerance = TypoTolerance.Min, - ignorePlurals = IgnorePlurals.QueryLanguages(QueryLanguage.English, QueryLanguage.French), - removeStopWords = RemoveStopWords.QueryLanguages(QueryLanguage.English, QueryLanguage.French), - distinct = Distinct(1) + ignorePlurals = IgnorePlurals.QueryLanguages(Language.English, Language.French), + removeStopWords = RemoveStopWords.QueryLanguages(Language.English, Language.French), + distinct = Distinct(1), + userData = json { "customUserData" to 42.0 } ) setSettings(copy).wait() shouldEqual TaskStatus.Published - getSettings() shouldEqual copy + getSettings() shouldEqual copy.copy( + userData = json { "customUserData" to 42 } // Round value expected to deserialize as int + ) } } } diff --git a/src/commonTest/kotlin/suite/TestSuiteSynonyms.kt b/src/commonTest/kotlin/suite/TestSuiteSynonyms.kt index 8b81a33e9..ce791d31b 100644 --- a/src/commonTest/kotlin/suite/TestSuiteSynonyms.kt +++ b/src/commonTest/kotlin/suite/TestSuiteSynonyms.kt @@ -16,7 +16,7 @@ import shouldBeTrue import shouldContain import shouldEqual import shouldFailWith -import kotlin.test.BeforeTest +import kotlin.test.AfterTest import kotlin.test.Test @@ -45,7 +45,7 @@ internal class TestSuiteSynonyms { private val index = clientAdmin1.initIndex(indexName) - @BeforeTest + @AfterTest fun clean() { runBlocking { cleanIndex(clientAdmin1, suffix) diff --git a/src/commonTest/kotlin/transport/TestCallableHosts.kt b/src/commonTest/kotlin/transport/TestCallableHosts.kt index 86335d0c5..324444212 100644 --- a/src/commonTest/kotlin/transport/TestCallableHosts.kt +++ b/src/commonTest/kotlin/transport/TestCallableHosts.kt @@ -13,7 +13,7 @@ import kotlin.test.Test internal class TestCallableHosts { private val configuration = ConfigurationSearch(clientAdmin1.applicationID, clientAdmin1.apiKey) - private val transport = Transport(configuration) + private val transport = Transport(configuration, null) private val hostRead = RetryableHost("${configuration.applicationID}-dsn.algolia.net", CallType.Read) private val hostWrite = RetryableHost("${configuration.applicationID}.algolia.net", CallType.Write) private val hostFallback1 = RetryableHost("${configuration.applicationID}-1.algolianet.com") diff --git a/src/jvmMain/kotlin/com/algolia/search/model/ClientDate.kt b/src/jvmMain/kotlin/com/algolia/search/model/ClientDate.kt index 6eb79644b..8d6f2dee0 100644 --- a/src/jvmMain/kotlin/com/algolia/search/model/ClientDate.kt +++ b/src/jvmMain/kotlin/com/algolia/search/model/ClientDate.kt @@ -10,13 +10,16 @@ import java.util.* * JVM implementation converting a [String] or a [Long] into a [Date] format. Relies on ISO8601. */ @Serializable(KSerializerClientDate::class) -public actual data class ClientDate actual constructor(override val raw: String) : Raw { +public actual data class ClientDate internal actual constructor(override val raw: String) : Raw { - actual constructor(timestamp: Long) : this(DateISO8601.format(timestamp)) + internal actual constructor(timestamp: Long) : this(DateISO8601.format(timestamp)) + /** + * In the eventuality of the Date format being wrong, we create an empty [Date] object instead of throwing an exception. + */ val date: Date = when { raw.length == 20 -> DateISO8601.dateISO8601.parse(raw) raw.length == 24 -> DateISO8601.dateISO8601Millis.parse(raw) else -> Date() } -} \ No newline at end of file +} diff --git a/src/jvmMain/kotlin/com/algolia/search/transport/Gzip.kt b/src/jvmMain/kotlin/com/algolia/search/transport/Gzip.kt new file mode 100644 index 000000000..15e933809 --- /dev/null +++ b/src/jvmMain/kotlin/com/algolia/search/transport/Gzip.kt @@ -0,0 +1,20 @@ +package com.algolia.search.transport + +import io.ktor.util.GZip +import io.ktor.util.KtorExperimentalAPI +import io.ktor.util.toByteArray +import kotlinx.coroutines.io.ByteReadChannel +import kotlinx.coroutines.runBlocking + + +internal actual object Gzip : (String) -> ByteArray { + + @Suppress("EXPERIMENTAL_API_USAGE") + override fun invoke(input: String): ByteArray { + return runBlocking { + GZip.run { + encode(ByteReadChannel(input)).toByteArray() + } + } + } +} \ No newline at end of file diff --git a/src/jvmTest/kotlin/Actual.kt b/src/jvmTest/kotlin/Actual.kt index 0057b8b78..41a9e0a8c 100644 --- a/src/jvmTest/kotlin/Actual.kt +++ b/src/jvmTest/kotlin/Actual.kt @@ -1,8 +1,12 @@ import com.algolia.search.client.ClientAnalytics import com.algolia.search.client.ClientInsights +import com.algolia.search.client.ClientPlaces import com.algolia.search.client.ClientSearch +import com.algolia.search.configuration.Compression +import com.algolia.search.configuration.ConfigurationSearch import com.algolia.search.helper.toAPIKey import com.algolia.search.helper.toApplicationID +import com.algolia.search.transport.Gzip import kotlinx.coroutines.CoroutineScope import java.io.File import java.text.SimpleDateFormat @@ -19,8 +23,11 @@ internal actual val clientAdmin1 = ClientSearch( System.getenv("ALGOLIA_ADMIN_KEY_1").toAPIKey() ) internal actual val clientAdmin2 = ClientSearch( - System.getenv("ALGOLIA_APPLICATION_ID_2").toApplicationID(), - System.getenv("ALGOLIA_ADMIN_KEY_2").toAPIKey() + ConfigurationSearch( + System.getenv("ALGOLIA_APPLICATION_ID_2").toApplicationID(), + System.getenv("ALGOLIA_ADMIN_KEY_2").toAPIKey(), + compression = Compression.None + ) ) internal actual val clientMcm = ClientSearch( System.getenv("ALGOLIA_ADMIN_ID_MCM").toApplicationID(), @@ -34,6 +41,10 @@ internal actual val clientInsights = ClientInsights( System.getenv("ALGOLIA_APPLICATION_ID_1").toApplicationID(), System.getenv("ALGOLIA_ADMIN_KEY_1").toAPIKey() ) +internal actual val clientPlaces = ClientPlaces( + System.getenv("ALGOLIA_PLACES_APP_ID").toApplicationID(), + System.getenv("ALGOLIA_PLACES_KEY").toAPIKey() +) internal actual val username: String get() { @@ -64,5 +75,9 @@ internal actual object DateFormat { } internal actual fun loadScratch(name: String): String { - return File("src/commonTest/resources/$name").readText() + return if (File("src/commonTest/resources").exists()) { + File("src/commonTest/resources/$name").readText() + } else { + File("../../src/commonTest/resources/$name").readText() + } } \ No newline at end of file