class ToBigDecimal
        implements Function {
    @Override
    public Object apply(Object o) {<FILL_FUNCTION_BODY>}
}

        if (o == null || o instanceof BigDecimal) {
            return o;
        }

        if (o instanceof Boolean) {
            return (Boolean) o ? BigDecimal.ONE : BigDecimal.ZERO;
        }

        if (o instanceof Byte
                || o instanceof Short
                || o instanceof Integer
                || o instanceof Long
                || o instanceof AtomicInteger
                || o instanceof AtomicLong
        ) {
            return BigDecimal.valueOf(((Number) o).longValue());
        }

        if (o instanceof Float || o instanceof Double) {
            double doubleValue = ((Number) o).doubleValue();
            return toBigDecimal(doubleValue);
        }

        if (o instanceof BigInteger) {
            return new BigDecimal((BigInteger) o);
        }

        if (o instanceof String) {
            return new BigDecimal((String) o);
        }

        throw new JSONException("can not cast to BigDecimal " + o.getClass());
    
<no_super_class>