func LiteralFromBytes()

in literals.go [125:207]


func LiteralFromBytes(typ Type, data []byte) (Literal, error) {
	if data == nil {
		return nil, ErrInvalidBinSerialization
	}

	switch t := typ.(type) {
	case BooleanType:
		var v BoolLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case Int32Type:
		var v Int32Literal
		err := v.UnmarshalBinary(data)

		return v, err
	case Int64Type:
		var v Int64Literal
		err := v.UnmarshalBinary(data)

		return v, err
	case Float32Type:
		var v Float32Literal
		err := v.UnmarshalBinary(data)

		return v, err
	case Float64Type:
		var v Float64Literal
		err := v.UnmarshalBinary(data)

		return v, err
	case StringType:
		var v StringLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case BinaryType:
		var v BinaryLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case FixedType:
		if len(data) != t.Len() {
			// looks like some writers will write a prefix of the fixed length
			// for lower/upper bounds instead of the full length. so let's pad
			// it out to the full length if unpacking a fixed length literal
			padded := make([]byte, t.Len())
			copy(padded, data)
			data = padded
		}
		var v FixedLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case DecimalType:
		v := DecimalLiteral{Scale: t.scale}
		err := v.UnmarshalBinary(data)

		return v, err
	case DateType:
		var v DateLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case TimeType:
		var v TimeLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case TimestampType, TimestampTzType:
		var v TimestampLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	case UUIDType:
		var v UUIDLiteral
		err := v.UnmarshalBinary(data)

		return v, err
	}

	return nil, ErrType
}