} else if (value instanceof QName && isIdentityrefUnion(type)) {
// Ugly special-case form unions with identityrefs
return encode(writer, (QName) value, parent);
+ } else if (value instanceof YangInstanceIdentifier && isInstanceIdentifierUnion(type)) {
+ return encodeInstanceIdentifier(writer, (YangInstanceIdentifier) value);
} else {
return serialize(type, value);
}
return false;
}
+ private boolean isInstanceIdentifierUnion(final TypeDefinition<?> type) {
+ if (type instanceof UnionTypeDefinition) {
+ for (TypeDefinition<?> subtype : ((UnionTypeDefinition) type).getTypes()) {
+ if (subtype instanceof InstanceIdentifierTypeDefinition || isInstanceIdentifierUnion(subtype)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private static String serialize(final @NonNull TypeDefinition<?> type, final @NonNull Object value) {
final TypeDefinitionAwareCodec<Object, ?> codec = TypeDefinitionAwareCodec.from(type);
if (codec == null) {