diff --git a/src/main/scala/algoliasearch/recommend/BooleanString.scala b/src/main/scala/algoliasearch/recommend/BooleanString.scala new file mode 100644 index 00000000..b177d247 --- /dev/null +++ b/src/main/scala/algoliasearch/recommend/BooleanString.scala @@ -0,0 +1,63 @@ +/** Recommend API The Recommend API lets you retrieve recommendations from one of Algolia's AI recommendation models + * that you previously trained on your data. ## Client libraries Use Algolia's API clients and libraries to reliably + * integrate Algolia's APIs with your apps. The official API clients are covered by Algolia's [Service Level + * Agreement](https://www.algolia.com/policies/sla/). See: [Algolia's + * ecosystem](https://www.algolia.com/doc/guides/getting-started/how-algolia-works/in-depth/ecosystem/) ## Base URLs + * The base URLs for requests to the Recommend API are: - `https://{APPLICATION_ID}.algolia.net` - + * `https://{APPLICATION_ID}-dsn.algolia.net`. If your subscription includes a [Distributed Search + * Network](https://dashboard.algolia.com/infra), this ensures that requests are sent to servers closest to users. Both + * URLs provide high availability by distributing requests with load balancing. **All requests must use HTTPS.** ## + * Retry strategy To guarantee a high availability, implement a retry strategy for all API requests using the URLs of + * your servers as fallbacks: - `https://{APPLICATION_ID}-1.algolianet.com` - + * `https://{APPLICATION_ID}-2.algolianet.com` - `https://{APPLICATION_ID}-3.algolianet.com` These URLs use a different + * DNS provider than the primary URLs. You should randomize this list to ensure an even load across the three servers. + * All Algolia API clients implement this retry strategy. ## Authentication To authenticate your API requests, add + * these headers: - `x-algolia-application-id`. Your Algolia application ID. - `x-algolia-api-key`. An API key with the + * necessary permissions to make the request. The required access control list (ACL) to make a request is listed in + * each endpoint's reference. You can find your application ID and API key in the [Algolia + * dashboard](https://dashboard.algolia.com/account). ## Request format Request bodies must be JSON objects. ## + * Response status and errors The Recommend API returns JSON responses. Since JSON doesn't guarantee any specific + * ordering, don't rely on the order of attributes in the API response. Successful responses return a `2xx` status. + * Client errors return a `4xx` status. Server errors are indicated by a `5xx` status. Error responses have a `message` + * property with more information. ## Version The current version of the Recommend API is version 1, as indicated by + * the `/1/` in each endpoint's URL. + * + * The version of the OpenAPI document: 1.0.0 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech Do not edit the class manually. + */ +package algoliasearch.recommend + +import org.json4s._ + +sealed trait BooleanString extends IgnorePluralsTrait + +/** BooleanString enumeration + */ +object BooleanString { + case object `True` extends BooleanString { + override def toString = "true" + } + case object `False` extends BooleanString { + override def toString = "false" + } + val values: Seq[BooleanString] = Seq(`True`, `False`) + + def withName(name: String): BooleanString = BooleanString.values + .find(_.toString == name) + .getOrElse(throw new MappingException(s"Unknown BooleanString value: $name")) +} + +class BooleanStringSerializer + extends CustomSerializer[BooleanString](_ => + ( + { + case JString(value) => BooleanString.withName(value) + case JNull => null + }, + { case value: BooleanString => + JString(value.toString) + } + ) + ) diff --git a/src/main/scala/algoliasearch/recommend/IgnorePlurals.scala b/src/main/scala/algoliasearch/recommend/IgnorePlurals.scala index 56cf86ef..ce08eaa7 100644 --- a/src/main/scala/algoliasearch/recommend/IgnorePlurals.scala +++ b/src/main/scala/algoliasearch/recommend/IgnorePlurals.scala @@ -29,6 +29,7 @@ */ package algoliasearch.recommend +import algoliasearch.recommend.BooleanString._ import algoliasearch.recommend.SupportedLanguage._ import org.json4s._ @@ -38,6 +39,8 @@ import org.json4s._ */ sealed trait IgnorePlurals +trait IgnorePluralsTrait extends IgnorePlurals + object IgnorePlurals { case class SeqOfSupportedLanguage(value: Seq[SupportedLanguage]) extends IgnorePlurals @@ -59,14 +62,16 @@ object IgnorePluralsSerializer extends Serializer[IgnorePlurals] { json match { case JArray(value) if value.forall(_.isInstanceOf[JArray]) => IgnorePlurals.SeqOfSupportedLanguage(value.map(_.extract)) - case JBool(value) => IgnorePlurals.BooleanValue(value) - case _ => throw new MappingException("Can't convert " + json + " to IgnorePlurals") + case value: JString => Extraction.extract[BooleanString](value) + case JBool(value) => IgnorePlurals.BooleanValue(value) + case _ => throw new MappingException("Can't convert " + json + " to IgnorePlurals") } } override def serialize(implicit format: Formats): PartialFunction[Any, JValue] = { case value: IgnorePlurals => value match { case IgnorePlurals.SeqOfSupportedLanguage(value) => JArray(value.map(Extraction.decompose).toList) + case value: BooleanString => JString(value.toString) case IgnorePlurals.BooleanValue(value) => JBool(value) } } diff --git a/src/main/scala/algoliasearch/recommend/JsonSupport.scala b/src/main/scala/algoliasearch/recommend/JsonSupport.scala index 26007440..81609d3d 100644 --- a/src/main/scala/algoliasearch/recommend/JsonSupport.scala +++ b/src/main/scala/algoliasearch/recommend/JsonSupport.scala @@ -36,6 +36,7 @@ object JsonSupport { new AdvancedSyntaxFeaturesSerializer() :+ new AlternativesAsExactSerializer() :+ new AroundRadiusAllSerializer() :+ + new BooleanStringSerializer() :+ new ExactOnSingleWordQuerySerializer() :+ new FbtModelSerializer() :+ new LookingSimilarModelSerializer() :+ diff --git a/src/main/scala/algoliasearch/search/BooleanString.scala b/src/main/scala/algoliasearch/search/BooleanString.scala new file mode 100644 index 00000000..e0836e59 --- /dev/null +++ b/src/main/scala/algoliasearch/search/BooleanString.scala @@ -0,0 +1,67 @@ +/** Search API The Algolia Search API lets you search, configure, and mange your indices and records. ## Client + * libraries Use Algolia's API clients and libraries to reliably integrate Algolia's APIs with your apps. The official + * API clients are covered by Algolia's [Service Level Agreement](https://www.algolia.com/policies/sla/). See: + * [Algolia's ecosystem](https://www.algolia.com/doc/guides/getting-started/how-algolia-works/in-depth/ecosystem/) ## + * Base URLs The base URLs for requests to the Search API are: - `https://{APPLICATION_ID}.algolia.net` - + * `https://{APPLICATION_ID}-dsn.algolia.net`. If your subscription includes a [Distributed Search + * Network](https://dashboard.algolia.com/infra), this ensures that requests are sent to servers closest to users. Both + * URLs provide high availability by distributing requests with load balancing. **All requests must use HTTPS.** ## + * Retry strategy To guarantee a high availability, implement a retry strategy for all API requests using the URLs of + * your servers as fallbacks: - `https://{APPLICATION_ID}-1.algolianet.com` - + * `https://{APPLICATION_ID}-2.algolianet.com` - `https://{APPLICATION_ID}-3.algolianet.com` These URLs use a different + * DNS provider than the primary URLs. You should randomize this list to ensure an even load across the three servers. + * All Algolia API clients implement this retry strategy. ## Authentication To authenticate your API requests, add + * these headers: - `x-algolia-application-id`. Your Algolia application ID. - `x-algolia-api-key`. An API key with the + * necessary permissions to make the request. The required access control list (ACL) to make a request is listed in + * each endpoint's reference. You can find your application ID and API key in the [Algolia + * dashboard](https://dashboard.algolia.com/account). ## Request format Depending on the endpoint, request bodies are + * either JSON objects or arrays of JSON objects, ## Parameters Parameters are passed as query parameters for GET and + * DELETE requests, and in the request body for POST and PUT requests. Query parameters must be + * [URL-encoded](https://developer.mozilla.org/en-US/docs/Glossary/Percent-encoding). Non-ASCII characters must be + * UTF-8 encoded. Plus characters (`+`) are interpreted as spaces. Arrays as query parameters must be one of: - A + * comma-separated string: `attributesToRetrieve=title,description` - A URL-encoded JSON array: + * `attributesToRetrieve=%5B%22title%22,%22description%22%D` ## Response status and errors The Search API returns JSON + * responses. Since JSON doesn't guarantee any specific ordering, don't rely on the order of attributes in the API + * response. Successful responses return a `2xx` status. Client errors return a `4xx` status. Server errors are + * indicated by a `5xx` status. Error responses have a `message` property with more information. ## Version The current + * version of the Search API is version 1, as indicated by the `/1/` in each endpoint's URL. + * + * The version of the OpenAPI document: 1.0.0 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech Do not edit the class manually. + */ +package algoliasearch.search + +import org.json4s._ + +sealed trait BooleanString extends IgnorePluralsTrait + +/** BooleanString enumeration + */ +object BooleanString { + case object `True` extends BooleanString { + override def toString = "true" + } + case object `False` extends BooleanString { + override def toString = "false" + } + val values: Seq[BooleanString] = Seq(`True`, `False`) + + def withName(name: String): BooleanString = BooleanString.values + .find(_.toString == name) + .getOrElse(throw new MappingException(s"Unknown BooleanString value: $name")) +} + +class BooleanStringSerializer + extends CustomSerializer[BooleanString](_ => + ( + { + case JString(value) => BooleanString.withName(value) + case JNull => null + }, + { case value: BooleanString => + JString(value.toString) + } + ) + ) diff --git a/src/main/scala/algoliasearch/search/IgnorePlurals.scala b/src/main/scala/algoliasearch/search/IgnorePlurals.scala index 567b4a68..a80c6524 100644 --- a/src/main/scala/algoliasearch/search/IgnorePlurals.scala +++ b/src/main/scala/algoliasearch/search/IgnorePlurals.scala @@ -33,6 +33,7 @@ */ package algoliasearch.search +import algoliasearch.search.BooleanString._ import algoliasearch.search.SupportedLanguage._ import org.json4s._ @@ -42,6 +43,8 @@ import org.json4s._ */ sealed trait IgnorePlurals +trait IgnorePluralsTrait extends IgnorePlurals + object IgnorePlurals { case class SeqOfSupportedLanguage(value: Seq[SupportedLanguage]) extends IgnorePlurals @@ -63,14 +66,16 @@ object IgnorePluralsSerializer extends Serializer[IgnorePlurals] { json match { case JArray(value) if value.forall(_.isInstanceOf[JArray]) => IgnorePlurals.SeqOfSupportedLanguage(value.map(_.extract)) - case JBool(value) => IgnorePlurals.BooleanValue(value) - case _ => throw new MappingException("Can't convert " + json + " to IgnorePlurals") + case value: JString => Extraction.extract[BooleanString](value) + case JBool(value) => IgnorePlurals.BooleanValue(value) + case _ => throw new MappingException("Can't convert " + json + " to IgnorePlurals") } } override def serialize(implicit format: Formats): PartialFunction[Any, JValue] = { case value: IgnorePlurals => value match { case IgnorePlurals.SeqOfSupportedLanguage(value) => JArray(value.map(Extraction.decompose).toList) + case value: BooleanString => JString(value.toString) case IgnorePlurals.BooleanValue(value) => JBool(value) } } diff --git a/src/main/scala/algoliasearch/search/JsonSupport.scala b/src/main/scala/algoliasearch/search/JsonSupport.scala index b6caa775..b47f7163 100644 --- a/src/main/scala/algoliasearch/search/JsonSupport.scala +++ b/src/main/scala/algoliasearch/search/JsonSupport.scala @@ -44,6 +44,7 @@ object JsonSupport { new AnchoringSerializer() :+ new ApiKeyOperationSerializer() :+ new AroundRadiusAllSerializer() :+ + new BooleanStringSerializer() :+ new BuiltInOperationTypeSerializer() :+ new DictionaryActionSerializer() :+ new DictionaryEntryStateSerializer() :+