+ /**
+ * Check if a particular type is corresponds to int8. Unlike {@link BaseTypes#isInt8(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the int8 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isInt8(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isInt8(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to int16. Unlike {@link BaseTypes#isInt16(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the int16 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isInt16(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isInt16(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to int32. Unlike {@link BaseTypes#isInt32(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the int32 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isInt32(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isInt32(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to int64. Unlike {@link BaseTypes#isInt64(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the int64 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isInt64(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isInt64(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to uint8. Unlike {@link BaseTypes#isUint8(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the uint8 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isUint8(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isUint8(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to uint16. Unlike {@link BaseTypes#isUint16(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the uint16 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isUint16(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isUint16(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to uint32. Unlike {@link BaseTypes#isUint32(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the uint32 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isUint32(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isUint32(BaseTypes.baseTypeOf(type));
+ }
+
+ /**
+ * Check if a particular type is corresponds to uint64. Unlike {@link BaseTypes#isUint64(TypeDefinition)}, this
+ * method performs recursive lookup to find the base type.
+ *
+ * @param type The type to check
+ * @return If the type belongs to the uint64 type family.
+ * @throws NullPointerException if type is null
+ */
+ public static boolean isUint64(@Nonnull final TypeDefinition<?> type) {
+ return BaseTypes.isUint64(BaseTypes.baseTypeOf(type));
+ }
+
+ private static DerivedTypeBuilder<BinaryTypeDefinition> derivedBinaryBuilder(@Nonnull final BinaryTypeDefinition baseType, @Nonnull final SchemaPath path) {