I don't find the pack/unpack minilanguage all that bad, per se. Lowercase
letters are signed quantities, uppercase unsigned and there's some mneumonic
meaning to the letters used. But it can get silly (sample from an SMPP
parser):
result.service_type,
result.source.addr_ton,
result.source.addr_npi,
result.source.addr,
result.dest.addr_ton,
result.dest.addr_npi,
result.dest.addr,
result.esm_class,
result.protocol_id,
result.prority,
result.schedule_time,
result.validity_period,
result.registered_delivery,
result.replace_if_present,
result.data_coding,
result.sm_default_msg_id,
result.message =
string.unpack(">z I1 I1 z I1 I1 z I1 I1 I1 z z I1 I1 I1 I1 s1",blob,13)
It was hard to debug, and the obvious solution:
result.service_type,pos = string.unpack(">z",blob,pos)
result.source.addr_ton,pos = string.unpack(">I1",blob,pos)
result.source.addr_npi,pos = string.unpack(">I1",blob,pos)
--- and so on