Skip to content

Releases: Enet4/dicom-rs

DICOM-rs v0.3

30 Sep 19:05
Compare
Choose a tag to compare

The third release of DICOM-rs encompasses a wide spectrum of quality-of-life features and improvements, making the library easier to use and more DICOM compliant. Future versions will hopefully tackle features of larger complexity and visibility.

Major Changes

  • [core/encoding/parser/object/ul] Error types have been refactored across the ecosystem of crates. They were completely restructured and designed via SNAFU, becoming more informative and useful. (#62)
  • [parser] The main data set reader supports multiple parsing strategies. By default, date, time, and date-time values are no longer parsed into chrono data types, thus not compromising the parsing process if they are invalid. (#65)
  • [core] The dicom_value! was given a few syntax changes, please see the respective documentation. (#56)
  • [code] PrimitiveValue's as_u8, as_i32, and as_tags methods are deprecated, in favor of the getter methods uint8_slice, int32_slice, and tags.
  • [encoding] Changes to TextCodec: new method name, and implementing Debug is no longer required (#53)
  • [encoding] SpecificCharacterSet has new variants and has been marked as non-exhaustive. (#53)
  • [transfer-syntax-registry] JPIP_DEREFERENCED_DEFLATE was renamed to JPIP_REFERENCED_DEFLATE (was a typo) (#58)

New

  • [core] Extended the public API for retrieving standard Rust values from DICOM PrimitiveValue, Value, and DataElement. Methods with and without automatic conversions are provided. (#56, #66, #68, #75)
  • [encoding] More character encodings are now supported: ISO-IR 100, ISO-IR 101, ISO-IR 109, ISO-IR 110, ISO-IR 144. (#53), plus GB18030 (#52 @kira-96)
  • [transfer-syntax-registry] Added more transfer syntaxes as described in DICOM PS3.6 2020b Table A-1 (#58)

Fixes and Enhancements

  • [core] Fixed an incorrect calculation of multi-valued data's length (#67)
  • [encoding] Fixed character set detection by the SpecificCharacterSet attribute (#52 @kira-96)
  • [parser] Fixed the parser not accepting sequence data in unknown attributes (#64)
  • [dcmdump] Redesigned the output of the tool, pushing values to the end and attribute names to the middle, and the output width has been adjusted for the terminal width (#45 @robyoung, #74)
  • [dcmdump] ImplementationClassUID was printing SOPClassUID by mistake (#61)
  • [dcmdump] The alias of the transfer syntax is now reported alongside its UID (#61)
  • [dcmdump] Human readable error output (#61)

Chores

  • Updated crate manifests: crates.io should now present the readme contents of each crate. (#57, #75)
  • Added documents for project conduct, governance, and contribution guidelines (#69)
  • Added WebAssembly testing to CI, for some of the components in the library. (#54)
  • Added integration test to OB with undefined length (#48 @robyoung)
  • dependency updates: itertools@0.9

Updated crates

  • dicom: 0.3.0
  • dicom-core: 0.3.0
  • dicom-encoding: 0.3.0
  • dicom-transfer-syntax-registry: 0.3.0
  • dicom-parser: 0.3.0
  • dicom-object: 0.3.0
  • dicom-dictionary-std: 0.3.0
  • dicom-ul: 0.2.0
  • dcmdump: 0.3.0
  • dicom-dictionary-builder: 0.1.2

Thanks

Special thanks to new and revisiting contributors involved in this version, as well as to users of the library who have contributed with their own real-life use cases of DICOM-rs.

0.2.0

24 May 16:39
Compare
Choose a tag to compare

This is the second release of the DICOM-rs ecosytem, encompassing a substantial amount of fixes, new capabilities, and API changes.

The listings presented below may not be exhaustive, please see the documentation and new API signatures for more details.

New features

  • [core] New experimental dicom_value! macro for constructing DICOM values out of standard Rust values. (#35)
  • [parser] Extended the API in order to enable printing data tokens into a data source. (#32)
  • [core/encoding/parser/object] Encapsulated pixel data can be read, written, and manipulated in memory as a sequence of raw data items. (#42)
  • [core/encoding/parser/object] DICOM objects can be saved to a file. (#32 #35)
  • [dcmdump] Should now support files with non-natively encoded pixel data
  • [ul] A first implementation of the DICOM upper-layer protocol (#4 @pauldotknopf)
  • [scpproxy] A proof of concept implementation of a Proxy SCP, which can be used for logging and diagnostics (#4 @pauldotknopf)
  • [dictionary-std] Updated data dictionary in accordance to the 2020b standard specification

Major changes

  • [encoding] decoders and encoders now provide triple-handshaking traits: Decode for decoding from any source, DecodeFrom<S> for decoding from a specific source, and likewise for encoders (#32)
  • [parser] DicomParser type is now a StatefulReader type; Printer type is a StatefulWriter (#35)
  • [core] Updated smallvec to 1.0.0 (#25)
  • [transfer-syntax-registry] Inventory-based implementation of the transfer syntax registry is now optional
    • This allows you to use DICOM-rs in environments which do not yet support inventory (e.g. WebAssembly)
    • [encoding/object/transfer-syntax-registry] disabled by default, enable the inventory-registry Cargo feature
    • [parent] inventory-registry is enabled by default in the parent dicom crate

Fixes

  • [parser] Prevent the parsing of empty values (#24)
  • [parser] Sequences and items with an explicit length are correctly parsed, without expecting a delimiter (#22)
  • [encoding] Fixed the decoding of DA values with only the year specifier (#33 @nicosalvato)
  • [object] Made file meta group table reading more robust, allowing a missing meta file version (#29)
  • [parser] Fixed the parsing of sequence values with preceding spaces (#7 @pauldotknopf)

Chores & Tweaks

  • Removed deprecated uses of Error#description and improved error display messages (#41 @robyoung)
  • Added a bit more documentation to existing crates (#38 @robyoung)
  • Added Clippy to CI (#13 @pauldotknopf)

Updated crates:

  • dicom: 0.2.0
  • dicom-core: 0.2.0
  • dicom-encoding: 0.2.0
  • dicom-transfer-syntax-registry: 0.2.0
  • dicom-parser: 0.2.0
  • dicom-object: 0.2.0
  • dicom-dictionary-std: 0.2.0
  • dcmdump: 0.2.0
  • dicom-dictionary-builder: 0.1.1

New crates:

  • dicom-ul: 0.1.0
  • dicom-scpproxy: 0.1.0

Thanks

Sincere thanks to those who have contributed to this version with pull requests, bug reports and discussion that led to this new pre-release milestone.

Future work according to the roadmap will likely incise on:

  • Borrowing and/or off-memory constructs of DICOM information to enable an implementation of efficient and lazy DICOM objects;
  • Improving the presentation of errors;
  • A first version of the pixel data manipulation API, so that objects can be intuitively interpreted as an image or a multi-dimensional array, as well as an implementation for trivial cases (native encoding with trivial photometric interpretations).