dxfscan 0.1.0

Binary DXF parser with typed entity data and lookup indices
Documentation
// SPDX-License-Identifier: ISC
/// The binary encoding type of a DXF group code's value.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ValueType {
    /// Null-terminated byte string.
    String,
    /// Single-byte boolean (`0` or `1`).
    Boolean,
    /// 16-bit signed integer, little-endian.
    Int16,
    /// 32-bit signed integer, little-endian.
    Int32,
    /// 64-bit signed integer, little-endian.
    Int64,
    /// IEEE 754 double-precision float, little-endian.
    Double,
    /// Length-prefixed raw byte chunk (hex-encoded in text DXF).
    BinaryChunk,
}

/// Returns the [`ValueType`] for a DXF group code.
///
/// Unknown codes default to [`ValueType::String`].
pub fn value_type_of(code: u16) -> ValueType {
    match code {
        0..=9 => ValueType::String,
        10..=59 => ValueType::Double,
        60..=89 => ValueType::Int16,
        90..=99 => ValueType::Int32,
        100..=109 => ValueType::String,
        110..=159 => ValueType::Double,
        160..=169 => ValueType::Int64,
        170..=189 => ValueType::Int16,
        210..=239 => ValueType::Double,
        260..=289 => ValueType::Int16,
        290..=299 => ValueType::Boolean,
        300..=309 => ValueType::String,
        310..=319 => ValueType::BinaryChunk,
        320..=369 => ValueType::String,
        370..=389 => ValueType::Int16,
        390..=399 => ValueType::String,
        400..=409 => ValueType::Int16,
        410..=419 => ValueType::String,
        420..=429 => ValueType::Int32,
        430..=439 => ValueType::String,
        440..=459 => ValueType::Int32,
        460..=469 => ValueType::Double,
        470..=479 => ValueType::String,
        480..=489 => ValueType::String,
        999 => ValueType::String,
        1000..=1003 => ValueType::String,
        1004 => ValueType::BinaryChunk,
        1005..=1009 => ValueType::String,
        1010..=1059 => ValueType::Double,
        1060..=1070 => ValueType::Int16,
        1071 => ValueType::Int32,
        _ => ValueType::String,
    }
}