Using IDLArgs
To create the binary form of Candid data in Java or to convert data from candid binary form to Java use the IDLArgs class.
This is how to create a byte[] array from a List of IDLValue.
IDLValue is a wrapped value, consisting of the Java value and the IDLType.
List<IDLValue> args = new ArrayList<IDLValue>();
BigInteger intValue = new BigInteger("10000");
IDLArgs idlArgs = IDLArgs.create(args);
byte[] payload = idlArgs.toBytes();
To convert data from byte[] array to IDLArgs use the Method fromBytes.
IDLArgs outArgs = IDLArgs.fromBytes(output);
When dealing with Complex Types, consider defining IDLTypes , a useful way for deserialization.
IDLType[] idlTypes = { idlValue.getIDLType() };
IDLArgs outArgs = IDLArgs.fromBytes(output, idlTypes);


IDLType class is a wrapper for Candid type definition. Use createType method to create a Java object.
For simple Candid types use only the Type argument.
IDLType idlType = IDLType.createType(Type.INT);
When creating VEC or OPT Candid types, the inner type needs to be defined.
The inner type can also have nested types.
IDLType idlArrayType = IDLType.createType(Type.VEC,Type.INT);
IDLType idlOptionalType = IDLType.createType(Type.OPT,Type.INT);
When creating the RECORD or VARIANT Candid types, the Type Map needs to be defined.
Type Map can also have nested types.
The key in Type Map is the Label type. Label can be Named, Unnamed or Id type.
Map<Label, Object> typesMap = new HashMap<Label, Object>();
mapValue.put(Label.createNamedLabel("foo"), IDLType.createType(Type.INT));
IDLType idlType = IDLType.createType(Type.RECORD,typesMap);
To create the IDLType directly from Java class or object use the helper methods.
These will automatically identify the default Candid type for Java class or object.
IDLType idlType = IDLType.createType(Integer.class);
BigInteger value = new BigInteger("100000000");
IDLType idlType = IDLType.createType(value);
To override default type use this variant.
IDLType idlType = IDLType.createType(value, Type.NAT);


To create the IDLValue Java object use the Method Create functon.
This method has several variants, in if the explicit type definition is required.
To get the Java object value from IDLValue use the Method getValue function.
BigInteger value = idlValue.getValue();
Copy link