com.tryfinch.api.models.Individual.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of finch-java-core Show documentation
Show all versions of finch-java-core Show documentation
The Finch HRIS API provides a unified way to connect to a multitide of HRIS
systems. The API requires an access token issued by Finch.
By default, Organization and Payroll requests use Finch's
[Data Syncs](/developer-resources/Data-Syncs). If a request is made before the
initial sync has completed, Finch will request data live from the provider. The
latency on live requests may range from seconds to minutes depending on the
provider and batch size. For automated integrations, Deductions requests (both
read and write) are always made live to the provider. Latencies may range from
seconds to minutes depending on the provider and batch size.
Employer products are specified by the product parameter, a space-separated list
of products that your application requests from an employer authenticating
through Finch Connect. Valid product names are—
- `company`: Read basic company data
- `directory`: Read company directory and organization structure
- `individual`: Read individual data, excluding income and employment data
- `employment`: Read individual employment and income data
- `payment`: Read payroll and contractor related payments by the company
- `pay_statement`: Read detailed pay statements for each individual
- `benefits`: Create and manage deductions and contributions and enrollment for
an employer
[![Open in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/21027137-08db0929-883d-4094-a9ce-dbf5a9bee4a4?action=collection%2Ffork&collection-url=entityId%3D21027137-08db0929-883d-4094-a9ce-dbf5a9bee4a4%26entityType%3Dcollection%26workspaceId%3D1edf19bc-e0a8-41e9-ac55-481a4b50790b)
// File generated from our OpenAPI spec by Stainless.
package com.tryfinch.api.models
import com.fasterxml.jackson.annotation.JsonAnyGetter
import com.fasterxml.jackson.annotation.JsonAnySetter
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.tryfinch.api.core.Enum
import com.tryfinch.api.core.ExcludeMissing
import com.tryfinch.api.core.JsonField
import com.tryfinch.api.core.JsonMissing
import com.tryfinch.api.core.JsonValue
import com.tryfinch.api.core.NoAutoDetect
import com.tryfinch.api.core.toUnmodifiable
import com.tryfinch.api.errors.FinchInvalidDataException
import java.util.Objects
import java.util.Optional
@JsonDeserialize(builder = Individual.Builder::class)
@NoAutoDetect
class Individual
private constructor(
private val id: JsonField,
private val firstName: JsonField,
private val middleName: JsonField,
private val lastName: JsonField,
private val preferredName: JsonField,
private val emails: JsonField>,
private val phoneNumbers: JsonField>,
private val gender: JsonField,
private val ethnicity: JsonField,
private val dob: JsonField,
private val residence: JsonField,
private val ssn: JsonField,
private val encryptedSsn: JsonField,
private val additionalProperties: Map,
) {
private var validated: Boolean = false
private var hashCode: Int = 0
/** A stable Finch `id` (UUID v4) for an individual in the company. */
fun id(): Optional = Optional.ofNullable(id.getNullable("id"))
/** The legal first name of the individual. */
fun firstName(): Optional = Optional.ofNullable(firstName.getNullable("first_name"))
/** The legal middle name of the individual. */
fun middleName(): Optional = Optional.ofNullable(middleName.getNullable("middle_name"))
/** The legal last name of the individual. */
fun lastName(): Optional = Optional.ofNullable(lastName.getNullable("last_name"))
/** The preferred name of the individual. */
fun preferredName(): Optional =
Optional.ofNullable(preferredName.getNullable("preferred_name"))
fun emails(): Optional> = Optional.ofNullable(emails.getNullable("emails"))
fun phoneNumbers(): Optional> =
Optional.ofNullable(phoneNumbers.getNullable("phone_numbers"))
/** The gender of the individual. */
fun gender(): Optional = Optional.ofNullable(gender.getNullable("gender"))
/** The EEOC-defined ethnicity of the individual. */
fun ethnicity(): Optional = Optional.ofNullable(ethnicity.getNullable("ethnicity"))
fun dob(): Optional = Optional.ofNullable(dob.getNullable("dob"))
fun residence(): Optional = Optional.ofNullable(residence.getNullable("residence"))
/**
* Social Security Number of the individual. This field is only available with the `ssn` scope
* enabled and the `options: { include: ['ssn'] }` param set in the body.
* [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).
*/
fun ssn(): Optional = Optional.ofNullable(ssn.getNullable("ssn"))
/**
* Social Security Number of the individual in **encrypted** format. This field is only
* available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in
* the body.
*/
fun encryptedSsn(): Optional =
Optional.ofNullable(encryptedSsn.getNullable("encrypted_ssn"))
/** A stable Finch `id` (UUID v4) for an individual in the company. */
@JsonProperty("id") @ExcludeMissing fun _id() = id
/** The legal first name of the individual. */
@JsonProperty("first_name") @ExcludeMissing fun _firstName() = firstName
/** The legal middle name of the individual. */
@JsonProperty("middle_name") @ExcludeMissing fun _middleName() = middleName
/** The legal last name of the individual. */
@JsonProperty("last_name") @ExcludeMissing fun _lastName() = lastName
/** The preferred name of the individual. */
@JsonProperty("preferred_name") @ExcludeMissing fun _preferredName() = preferredName
@JsonProperty("emails") @ExcludeMissing fun _emails() = emails
@JsonProperty("phone_numbers") @ExcludeMissing fun _phoneNumbers() = phoneNumbers
/** The gender of the individual. */
@JsonProperty("gender") @ExcludeMissing fun _gender() = gender
/** The EEOC-defined ethnicity of the individual. */
@JsonProperty("ethnicity") @ExcludeMissing fun _ethnicity() = ethnicity
@JsonProperty("dob") @ExcludeMissing fun _dob() = dob
@JsonProperty("residence") @ExcludeMissing fun _residence() = residence
/**
* Social Security Number of the individual. This field is only available with the `ssn` scope
* enabled and the `options: { include: ['ssn'] }` param set in the body.
* [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).
*/
@JsonProperty("ssn") @ExcludeMissing fun _ssn() = ssn
/**
* Social Security Number of the individual in **encrypted** format. This field is only
* available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in
* the body.
*/
@JsonProperty("encrypted_ssn") @ExcludeMissing fun _encryptedSsn() = encryptedSsn
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun validate(): Individual = apply {
if (!validated) {
id()
firstName()
middleName()
lastName()
preferredName()
emails().map { it.forEach { it.validate() } }
phoneNumbers().map { it.forEach { it?.validate() } }
gender()
ethnicity()
dob()
residence().map { it.validate() }
ssn()
encryptedSsn()
validated = true
}
}
fun toBuilder() = Builder().from(this)
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Individual &&
this.id == other.id &&
this.firstName == other.firstName &&
this.middleName == other.middleName &&
this.lastName == other.lastName &&
this.preferredName == other.preferredName &&
this.emails == other.emails &&
this.phoneNumbers == other.phoneNumbers &&
this.gender == other.gender &&
this.ethnicity == other.ethnicity &&
this.dob == other.dob &&
this.residence == other.residence &&
this.ssn == other.ssn &&
this.encryptedSsn == other.encryptedSsn &&
this.additionalProperties == other.additionalProperties
}
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode =
Objects.hash(
id,
firstName,
middleName,
lastName,
preferredName,
emails,
phoneNumbers,
gender,
ethnicity,
dob,
residence,
ssn,
encryptedSsn,
additionalProperties,
)
}
return hashCode
}
override fun toString() =
"Individual{id=$id, firstName=$firstName, middleName=$middleName, lastName=$lastName, preferredName=$preferredName, emails=$emails, phoneNumbers=$phoneNumbers, gender=$gender, ethnicity=$ethnicity, dob=$dob, residence=$residence, ssn=$ssn, encryptedSsn=$encryptedSsn, additionalProperties=$additionalProperties}"
companion object {
@JvmStatic fun builder() = Builder()
}
class Builder {
private var id: JsonField = JsonMissing.of()
private var firstName: JsonField = JsonMissing.of()
private var middleName: JsonField = JsonMissing.of()
private var lastName: JsonField = JsonMissing.of()
private var preferredName: JsonField = JsonMissing.of()
private var emails: JsonField> = JsonMissing.of()
private var phoneNumbers: JsonField> = JsonMissing.of()
private var gender: JsonField = JsonMissing.of()
private var ethnicity: JsonField = JsonMissing.of()
private var dob: JsonField = JsonMissing.of()
private var residence: JsonField = JsonMissing.of()
private var ssn: JsonField = JsonMissing.of()
private var encryptedSsn: JsonField = JsonMissing.of()
private var additionalProperties: MutableMap = mutableMapOf()
@JvmSynthetic
internal fun from(individual: Individual) = apply {
this.id = individual.id
this.firstName = individual.firstName
this.middleName = individual.middleName
this.lastName = individual.lastName
this.preferredName = individual.preferredName
this.emails = individual.emails
this.phoneNumbers = individual.phoneNumbers
this.gender = individual.gender
this.ethnicity = individual.ethnicity
this.dob = individual.dob
this.residence = individual.residence
this.ssn = individual.ssn
this.encryptedSsn = individual.encryptedSsn
additionalProperties(individual.additionalProperties)
}
/** A stable Finch `id` (UUID v4) for an individual in the company. */
fun id(id: String) = id(JsonField.of(id))
/** A stable Finch `id` (UUID v4) for an individual in the company. */
@JsonProperty("id") @ExcludeMissing fun id(id: JsonField) = apply { this.id = id }
/** The legal first name of the individual. */
fun firstName(firstName: String) = firstName(JsonField.of(firstName))
/** The legal first name of the individual. */
@JsonProperty("first_name")
@ExcludeMissing
fun firstName(firstName: JsonField) = apply { this.firstName = firstName }
/** The legal middle name of the individual. */
fun middleName(middleName: String) = middleName(JsonField.of(middleName))
/** The legal middle name of the individual. */
@JsonProperty("middle_name")
@ExcludeMissing
fun middleName(middleName: JsonField) = apply { this.middleName = middleName }
/** The legal last name of the individual. */
fun lastName(lastName: String) = lastName(JsonField.of(lastName))
/** The legal last name of the individual. */
@JsonProperty("last_name")
@ExcludeMissing
fun lastName(lastName: JsonField) = apply { this.lastName = lastName }
/** The preferred name of the individual. */
fun preferredName(preferredName: String) = preferredName(JsonField.of(preferredName))
/** The preferred name of the individual. */
@JsonProperty("preferred_name")
@ExcludeMissing
fun preferredName(preferredName: JsonField) = apply {
this.preferredName = preferredName
}
fun emails(emails: List) = emails(JsonField.of(emails))
@JsonProperty("emails")
@ExcludeMissing
fun emails(emails: JsonField>) = apply { this.emails = emails }
fun phoneNumbers(phoneNumbers: List) =
phoneNumbers(JsonField.of(phoneNumbers))
@JsonProperty("phone_numbers")
@ExcludeMissing
fun phoneNumbers(phoneNumbers: JsonField>) = apply {
this.phoneNumbers = phoneNumbers
}
/** The gender of the individual. */
fun gender(gender: Gender) = gender(JsonField.of(gender))
/** The gender of the individual. */
@JsonProperty("gender")
@ExcludeMissing
fun gender(gender: JsonField) = apply { this.gender = gender }
/** The EEOC-defined ethnicity of the individual. */
fun ethnicity(ethnicity: Ethnicity) = ethnicity(JsonField.of(ethnicity))
/** The EEOC-defined ethnicity of the individual. */
@JsonProperty("ethnicity")
@ExcludeMissing
fun ethnicity(ethnicity: JsonField) = apply { this.ethnicity = ethnicity }
fun dob(dob: String) = dob(JsonField.of(dob))
@JsonProperty("dob")
@ExcludeMissing
fun dob(dob: JsonField) = apply { this.dob = dob }
fun residence(residence: Location) = residence(JsonField.of(residence))
@JsonProperty("residence")
@ExcludeMissing
fun residence(residence: JsonField) = apply { this.residence = residence }
/**
* Social Security Number of the individual. This field is only available with the `ssn`
* scope enabled and the `options: { include: ['ssn'] }` param set in the body.
* [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).
*/
fun ssn(ssn: String) = ssn(JsonField.of(ssn))
/**
* Social Security Number of the individual. This field is only available with the `ssn`
* scope enabled and the `options: { include: ['ssn'] }` param set in the body.
* [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).
*/
@JsonProperty("ssn")
@ExcludeMissing
fun ssn(ssn: JsonField) = apply { this.ssn = ssn }
/**
* Social Security Number of the individual in **encrypted** format. This field is only
* available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set
* in the body.
*/
fun encryptedSsn(encryptedSsn: String) = encryptedSsn(JsonField.of(encryptedSsn))
/**
* Social Security Number of the individual in **encrypted** format. This field is only
* available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set
* in the body.
*/
@JsonProperty("encrypted_ssn")
@ExcludeMissing
fun encryptedSsn(encryptedSsn: JsonField) = apply {
this.encryptedSsn = encryptedSsn
}
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Individual =
Individual(
id,
firstName,
middleName,
lastName,
preferredName,
emails.map { it.toUnmodifiable() },
phoneNumbers.map { it.toUnmodifiable() },
gender,
ethnicity,
dob,
residence,
ssn,
encryptedSsn,
additionalProperties.toUnmodifiable(),
)
}
@JsonDeserialize(builder = Email.Builder::class)
@NoAutoDetect
class Email
private constructor(
private val data: JsonField,
private val type: JsonField,
private val additionalProperties: Map,
) {
private var validated: Boolean = false
private var hashCode: Int = 0
fun data(): Optional = Optional.ofNullable(data.getNullable("data"))
fun type(): Optional = Optional.ofNullable(type.getNullable("type"))
@JsonProperty("data") @ExcludeMissing fun _data() = data
@JsonProperty("type") @ExcludeMissing fun _type() = type
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun validate(): Email = apply {
if (!validated) {
data()
type()
validated = true
}
}
fun toBuilder() = Builder().from(this)
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Email &&
this.data == other.data &&
this.type == other.type &&
this.additionalProperties == other.additionalProperties
}
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode =
Objects.hash(
data,
type,
additionalProperties,
)
}
return hashCode
}
override fun toString() =
"Email{data=$data, type=$type, additionalProperties=$additionalProperties}"
companion object {
@JvmStatic fun builder() = Builder()
}
class Builder {
private var data: JsonField = JsonMissing.of()
private var type: JsonField = JsonMissing.of()
private var additionalProperties: MutableMap = mutableMapOf()
@JvmSynthetic
internal fun from(email: Email) = apply {
this.data = email.data
this.type = email.type
additionalProperties(email.additionalProperties)
}
fun data(data: String) = data(JsonField.of(data))
@JsonProperty("data")
@ExcludeMissing
fun data(data: JsonField) = apply { this.data = data }
fun type(type: Type) = type(JsonField.of(type))
@JsonProperty("type")
@ExcludeMissing
fun type(type: JsonField) = apply { this.type = type }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Email =
Email(
data,
type,
additionalProperties.toUnmodifiable(),
)
}
class Type
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Type && this.value == other.value
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
@JvmField val WORK = Type(JsonField.of("work"))
@JvmField val PERSONAL = Type(JsonField.of("personal"))
@JvmStatic fun of(value: String) = Type(JsonField.of(value))
}
enum class Known {
WORK,
PERSONAL,
}
enum class Value {
WORK,
PERSONAL,
_UNKNOWN,
}
fun value(): Value =
when (this) {
WORK -> Value.WORK
PERSONAL -> Value.PERSONAL
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
WORK -> Known.WORK
PERSONAL -> Known.PERSONAL
else -> throw FinchInvalidDataException("Unknown Type: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
}
class Ethnicity
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Ethnicity && this.value == other.value
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
@JvmField val ASIAN = Ethnicity(JsonField.of("asian"))
@JvmField val WHITE = Ethnicity(JsonField.of("white"))
@JvmField
val BLACK_OR_AFRICAN_AMERICAN = Ethnicity(JsonField.of("black_or_african_american"))
@JvmField
val NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER =
Ethnicity(JsonField.of("native_hawaiian_or_pacific_islander"))
@JvmField
val AMERICAN_INDIAN_OR_ALASKA_NATIVE =
Ethnicity(JsonField.of("american_indian_or_alaska_native"))
@JvmField val HISPANIC_OR_LATINO = Ethnicity(JsonField.of("hispanic_or_latino"))
@JvmField val TWO_OR_MORE_RACES = Ethnicity(JsonField.of("two_or_more_races"))
@JvmField val DECLINE_TO_SPECIFY = Ethnicity(JsonField.of("decline_to_specify"))
@JvmStatic fun of(value: String) = Ethnicity(JsonField.of(value))
}
enum class Known {
ASIAN,
WHITE,
BLACK_OR_AFRICAN_AMERICAN,
NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER,
AMERICAN_INDIAN_OR_ALASKA_NATIVE,
HISPANIC_OR_LATINO,
TWO_OR_MORE_RACES,
DECLINE_TO_SPECIFY,
}
enum class Value {
ASIAN,
WHITE,
BLACK_OR_AFRICAN_AMERICAN,
NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER,
AMERICAN_INDIAN_OR_ALASKA_NATIVE,
HISPANIC_OR_LATINO,
TWO_OR_MORE_RACES,
DECLINE_TO_SPECIFY,
_UNKNOWN,
}
fun value(): Value =
when (this) {
ASIAN -> Value.ASIAN
WHITE -> Value.WHITE
BLACK_OR_AFRICAN_AMERICAN -> Value.BLACK_OR_AFRICAN_AMERICAN
NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER -> Value.NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER
AMERICAN_INDIAN_OR_ALASKA_NATIVE -> Value.AMERICAN_INDIAN_OR_ALASKA_NATIVE
HISPANIC_OR_LATINO -> Value.HISPANIC_OR_LATINO
TWO_OR_MORE_RACES -> Value.TWO_OR_MORE_RACES
DECLINE_TO_SPECIFY -> Value.DECLINE_TO_SPECIFY
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
ASIAN -> Known.ASIAN
WHITE -> Known.WHITE
BLACK_OR_AFRICAN_AMERICAN -> Known.BLACK_OR_AFRICAN_AMERICAN
NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER -> Known.NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER
AMERICAN_INDIAN_OR_ALASKA_NATIVE -> Known.AMERICAN_INDIAN_OR_ALASKA_NATIVE
HISPANIC_OR_LATINO -> Known.HISPANIC_OR_LATINO
TWO_OR_MORE_RACES -> Known.TWO_OR_MORE_RACES
DECLINE_TO_SPECIFY -> Known.DECLINE_TO_SPECIFY
else -> throw FinchInvalidDataException("Unknown Ethnicity: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
class Gender
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Gender && this.value == other.value
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
@JvmField val FEMALE = Gender(JsonField.of("female"))
@JvmField val MALE = Gender(JsonField.of("male"))
@JvmField val OTHER = Gender(JsonField.of("other"))
@JvmField val DECLINE_TO_SPECIFY = Gender(JsonField.of("decline_to_specify"))
@JvmStatic fun of(value: String) = Gender(JsonField.of(value))
}
enum class Known {
FEMALE,
MALE,
OTHER,
DECLINE_TO_SPECIFY,
}
enum class Value {
FEMALE,
MALE,
OTHER,
DECLINE_TO_SPECIFY,
_UNKNOWN,
}
fun value(): Value =
when (this) {
FEMALE -> Value.FEMALE
MALE -> Value.MALE
OTHER -> Value.OTHER
DECLINE_TO_SPECIFY -> Value.DECLINE_TO_SPECIFY
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
FEMALE -> Known.FEMALE
MALE -> Known.MALE
OTHER -> Known.OTHER
DECLINE_TO_SPECIFY -> Known.DECLINE_TO_SPECIFY
else -> throw FinchInvalidDataException("Unknown Gender: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
@JsonDeserialize(builder = PhoneNumber.Builder::class)
@NoAutoDetect
class PhoneNumber
private constructor(
private val data: JsonField,
private val type: JsonField,
private val additionalProperties: Map,
) {
private var validated: Boolean = false
private var hashCode: Int = 0
fun data(): Optional = Optional.ofNullable(data.getNullable("data"))
fun type(): Optional = Optional.ofNullable(type.getNullable("type"))
@JsonProperty("data") @ExcludeMissing fun _data() = data
@JsonProperty("type") @ExcludeMissing fun _type() = type
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun validate(): PhoneNumber = apply {
if (!validated) {
data()
type()
validated = true
}
}
fun toBuilder() = Builder().from(this)
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is PhoneNumber &&
this.data == other.data &&
this.type == other.type &&
this.additionalProperties == other.additionalProperties
}
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode =
Objects.hash(
data,
type,
additionalProperties,
)
}
return hashCode
}
override fun toString() =
"PhoneNumber{data=$data, type=$type, additionalProperties=$additionalProperties}"
companion object {
@JvmStatic fun builder() = Builder()
}
class Builder {
private var data: JsonField = JsonMissing.of()
private var type: JsonField = JsonMissing.of()
private var additionalProperties: MutableMap = mutableMapOf()
@JvmSynthetic
internal fun from(phoneNumber: PhoneNumber) = apply {
this.data = phoneNumber.data
this.type = phoneNumber.type
additionalProperties(phoneNumber.additionalProperties)
}
fun data(data: String) = data(JsonField.of(data))
@JsonProperty("data")
@ExcludeMissing
fun data(data: JsonField) = apply { this.data = data }
fun type(type: Type) = type(JsonField.of(type))
@JsonProperty("type")
@ExcludeMissing
fun type(type: JsonField) = apply { this.type = type }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): PhoneNumber =
PhoneNumber(
data,
type,
additionalProperties.toUnmodifiable(),
)
}
class Type
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return other is Type && this.value == other.value
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
@JvmField val WORK = Type(JsonField.of("work"))
@JvmField val PERSONAL = Type(JsonField.of("personal"))
@JvmStatic fun of(value: String) = Type(JsonField.of(value))
}
enum class Known {
WORK,
PERSONAL,
}
enum class Value {
WORK,
PERSONAL,
_UNKNOWN,
}
fun value(): Value =
when (this) {
WORK -> Value.WORK
PERSONAL -> Value.PERSONAL
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
WORK -> Known.WORK
PERSONAL -> Known.PERSONAL
else -> throw FinchInvalidDataException("Unknown Type: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
}
}