public void serialize()

in flink-cdc-runtime/src/main/java/org/apache/flink/cdc/runtime/serializer/schema/DataTypeSerializer.java [101:182]


    public void serialize(DataType record, DataOutputView target) throws IOException {
        if (record instanceof RowType) {
            enumSerializer.serialize(DataTypeClass.ROW, target);
            getRowTypeSerializer().serialize((RowType) record, target);
        } else if (record instanceof BinaryType) {
            enumSerializer.serialize(DataTypeClass.BINARY, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((BinaryType) record).getLength());
        } else if (record instanceof ArrayType) {
            enumSerializer.serialize(DataTypeClass.ARRAY, target);
            target.writeBoolean(record.isNullable());
            this.serialize(((ArrayType) record).getElementType(), target);
        } else if (record instanceof BooleanType) {
            enumSerializer.serialize(DataTypeClass.BOOLEAN, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof DecimalType) {
            enumSerializer.serialize(DataTypeClass.DECIMAL, target);
            target.writeBoolean(record.isNullable());

            DecimalType decimalType = (DecimalType) record;
            target.writeInt(decimalType.getPrecision());
            target.writeInt(decimalType.getScale());
        } else if (record instanceof LocalZonedTimestampType) {
            enumSerializer.serialize(DataTypeClass.LOCAL_ZONED_TIMESTAMP, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((LocalZonedTimestampType) record).getPrecision());
        } else if (record instanceof VarBinaryType) {
            enumSerializer.serialize(DataTypeClass.VARBINARY, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((VarBinaryType) record).getLength());
        } else if (record instanceof CharType) {
            enumSerializer.serialize(DataTypeClass.CHAR, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((CharType) record).getLength());
        } else if (record instanceof SmallIntType) {
            enumSerializer.serialize(DataTypeClass.SMALLINT, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof TimestampType) {
            enumSerializer.serialize(DataTypeClass.TIMESTAMP, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((TimestampType) record).getPrecision());
        } else if (record instanceof IntType) {
            enumSerializer.serialize(DataTypeClass.INT, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof FloatType) {
            enumSerializer.serialize(DataTypeClass.FLOAT, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof MapType) {
            enumSerializer.serialize(DataTypeClass.MAP, target);
            target.writeBoolean(record.isNullable());

            MapType mapType = (MapType) record;
            this.serialize(mapType.getKeyType(), target);
            this.serialize(mapType.getValueType(), target);
        } else if (record instanceof TimeType) {
            enumSerializer.serialize(DataTypeClass.TIME, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((TimeType) record).getPrecision());
        } else if (record instanceof TinyIntType) {
            enumSerializer.serialize(DataTypeClass.TINYINT, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof VarCharType) {
            enumSerializer.serialize(DataTypeClass.VARCHAR, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((VarCharType) record).getLength());
        } else if (record instanceof DateType) {
            enumSerializer.serialize(DataTypeClass.DATE, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof ZonedTimestampType) {
            enumSerializer.serialize(DataTypeClass.ZONED_TIMESTAMP, target);
            target.writeBoolean(record.isNullable());
            target.writeInt(((ZonedTimestampType) record).getPrecision());
        } else if (record instanceof DoubleType) {
            enumSerializer.serialize(DataTypeClass.DOUBLE, target);
            target.writeBoolean(record.isNullable());
        } else if (record instanceof BigIntType) {
            enumSerializer.serialize(DataTypeClass.BIGINT, target);
            target.writeBoolean(record.isNullable());
        } else {
            throw new IllegalArgumentException("Unknown data type : " + record);
        }
    }