All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Frame#from_io without a block, buffering the whole frame instead. Only makes a difference for body frames, which can be streamed with the block version but not with this new one.
- Connection#UpdateSecret/Ok frame definition
- Fixed an issue where Table#merge with NamedTuple failed to replace the old value and instead just added another entry for the same key.
- Table#delete and Table#has_key? now only accepts String argument. Other types will issue a deprecation warning.
- Add support for Table to be merged with another Table
- Fixed an issue where reassigning values in a Table with a nested Table would overwrite existing data.
- Fixed issue where copying directly to the buffer didn't update the position in the IO, causing subsequent writes to overwrite existing data.
- Write Hash/NamedTuple directly to Table IO
- Optimize Table performance with copy-on-write
- Table#reject!/#merge! support
- Support negative (signed) values for the Decimal values in Table
- Validate property flags also when "skipping" Properties.
- Frame#to_slice, returns a byte slice of the frame (but uses heap allocation underneath)
Update @bytesize in Frames when properties (such as queue name) are updated
- Optimized Properties#to_json
- Return early from Properties.from_bytes/from_io/#bytesize if flags == 0
- Table#to_io is now thread safe
- Include type # in FrameDecode error message if invalid Method type
- Bug fix for Properties.from_json
- Removed Properties.cast_to_fields
- Removed the use of a StringPool in ShortStrings, to fix a multi threading issue and memory growth issues.
- 10-20% faster encoding/decoding of frames
- Support for JSON::Any in Tables
- Table.from_bytes copies the bytes, so that it can be modified later on
- Properties/ShortString/Table.from_bytes for parsing directly from a byte slice
- Properties#timestamp= now works as expected
- Try parse timestamp as milliseconds from epoch if seconds from epoch overflows
- Parse timestamp on demand, as it might not contain a valid timestamp
- Table can be created from a NamedTuple
- Crystal 1.0.0 compability
- Crystal 0.36.0 compability
- Exchange::UnbindOk did not have the wrong method id, only wireshark had it backwards
- Exchange::UnbindOk had the wrong method id
- Tx::Select was handled as Confirm::Select
- Table's are now compared on a semantic level, not on the byte level
- Table#to_h is now recursive, in the sense that lower level Tables are also converted to hashes
- Support for parsing Decimal numbers (to Float64) in Tables
- Queue::Bind#routing_key is a property so that it can be overwritten
- Queue name is now a property on Consume/Get frames too
- Support for Transaction frames
- Queue name is now a property on all frames that includes that argument
- Raise Error::FrameDecode when invalid Property flags are detected
- Frames::Header#class_id and #weight are now exposed
- Error::FrameDecode is now raised on unexpected Frame type
- BytesBody where the body is a slice of bytes instead of an IO object
- Crystal 0.35.1 compability, don't return bytes on to_io
- Frame#to_io returns number of bytes written
- Crystal 0.35 compability
- Internal byteformat of Table is always NetworkEndian, but allow prefix size to be in any format
- No default byteformat for Properties.skip
- Properties.skip didn't skip the length byte(s)
- Properties.skip handles headers properly
- Explicit return types on impl of abstract methods
- AMQ::Protocol::Properties.skip method
- Don't try catch Errno that's removed in Crystal 0.34.0
- The initial capacity of the string pool in ShortString is increased to 256 entries
- Clone methods for Properties and Table
- Queue::Bind#queue_name is now a property (as opposed to a reader)
- Frame#inspect
- GetEmpty parsed correctly (short-string argument instead of UInt16)
- Timestamp is correctly parsed as seconds from unix epoch
- Headers are now parsed on-demand instead of everytime
- Adding all parsed Short Strings to a StringPool to decrease GC pressure
- Added this CHANGELOG file