ValueBoxing.java

package com.surrealdb;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.UUID;

/**
 * Boxes raw Java values into {@link ValueMut} instances, used by factories like
 * {@link Array#of(java.lang.Object...)} and
 * {@link Id#from(java.lang.Object...)} to accept heterogeneous element lists.
 */
final class ValueBoxing {

	private ValueBoxing() {
	}

	static ValueMut box(java.lang.Object e) {
		if (e == null) {
			return ValueMut.createNull();
		}
		if (e instanceof String) {
			return ValueMut.createString((String) e);
		}
		if (e instanceof Long) {
			return ValueMut.createLong((Long) e);
		}
		if (e instanceof Integer) {
			return ValueMut.createLong(((Integer) e).longValue());
		}
		if (e instanceof Short) {
			return ValueMut.createLong(((Short) e).longValue());
		}
		if (e instanceof Byte) {
			return ValueMut.createLong(((Byte) e).longValue());
		}
		if (e instanceof Boolean) {
			return ValueMut.createBoolean((Boolean) e);
		}
		if (e instanceof Double) {
			return ValueMut.createDouble((Double) e);
		}
		if (e instanceof Float) {
			return ValueMut.createDouble(((Float) e).doubleValue());
		}
		if (e instanceof BigDecimal) {
			return ValueMut.createBigDecimal((BigDecimal) e);
		}
		if (e instanceof UUID) {
			return ValueMut.createUuid((UUID) e);
		}
		if (e instanceof Duration) {
			return ValueMut.createDuration((Duration) e);
		}
		if (e instanceof ZonedDateTime) {
			return ValueMut.createDatetime((ZonedDateTime) e);
		}
		if (e instanceof Array) {
			return ValueMut.createArray((Array) e);
		}
		if (e instanceof Id) {
			return ValueMut.createId((Id) e);
		}
		if (e instanceof RecordId) {
			return ValueMut.createRecordId((RecordId) e);
		}
		if (e instanceof com.surrealdb.Object) {
			return ValueMut.createObject((com.surrealdb.Object) e);
		}
		throw new IllegalArgumentException("unsupported element type " + e.getClass().getName());
	}
}