blob: 2c8da42ed2e9034863fd7dd88eea1f924d4eebc1 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.v23.vdl;
import java.lang.reflect.Type;
/**
* NativeTypes provides helpers to register conversion of values from Java native types
* (like org.joda.time) to VDL wire representation.
*/
public class NativeTypes {
/**
* Converts java native values to VDL wire representation.
*/
public static abstract class Converter {
private final Type wireType;
public Converter(Type wireType) {
this.wireType = wireType;
}
/**
* Converts a java native value to a VDL value.
*
* @throws IllegalArgumentException if the native value has incorrect type
*/
public abstract VdlValue vdlValueFromNative(Object nativeValue);
/**
* Converts a VDL value to a corresponding java native value.
*
* @throws IllegalArgumentException if the VDL value has incorrect type
*/
public abstract Object nativeFromVdlValue(VdlValue value);
/**
* Returns VDL wire type corresponding to the java native type.
*/
public Type getWireType() {
return wireType;
}
/**
* @throws IllegalArgumentException if value is not an instance of expected class
*/
protected static void assertInstanceOf(Object value, Class<?> expectedClass) {
if (!expectedClass.isAssignableFrom(value.getClass())) {
throw new IllegalArgumentException("Unexpected value class: expected "
+ expectedClass + ", got " + value.getClass());
}
}
}
}