Releases: Enet4/dicom-rs
DICOM-rs v0.3
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
'sas_u8
,as_i32
, andas_tags
methods are deprecated, in favor of the getter methodsuint8_slice
,int32_slice
, andtags
. - [encoding] Changes to
TextCodec
: new methodname
, and implementingDebug
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 toJPIP_REFERENCED_DEFLATE
(was a typo) (#58)
New
- [core] Extended the public API for retrieving standard Rust values from DICOM
PrimitiveValue
,Value
, andDataElement
. 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.0dicom-core
: 0.3.0dicom-encoding
: 0.3.0dicom-transfer-syntax-registry
: 0.3.0dicom-parser
: 0.3.0dicom-object
: 0.3.0dicom-dictionary-std
: 0.3.0dicom-ul
: 0.2.0dcmdump
: 0.3.0dicom-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
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 aStatefulReader
type;Printer
type is aStatefulWriter
(#35) - [core] Updated
smallvec
to1.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 parentdicom
crate
- This allows you to use DICOM-rs in environments which do not yet support
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.0dicom-core
: 0.2.0dicom-encoding
: 0.2.0dicom-transfer-syntax-registry
: 0.2.0dicom-parser
: 0.2.0dicom-object
: 0.2.0dicom-dictionary-std
: 0.2.0dcmdump
: 0.2.0dicom-dictionary-builder
: 0.1.1
New crates:
dicom-ul
: 0.1.0dicom-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).