dicom_core::prelude

Macro dicom_value

Source
macro_rules! dicom_value {
    () => { ... };
    (Strs, [ $($elem: expr),+ , ]) => { ... };
    (Strs, [ $($elem: expr),+ ]) => { ... };
    ($typ: ident, [ $($elem: expr),+ , ]) => { ... };
    ($typ: ident, [ $($elem: expr),+ ]) => { ... };
    (Str, $elem: expr) => { ... };
    ($typ: ident, $elem: expr) => { ... };
    ($elem: expr) => { ... };
}
Expand description

Helper macro for constructing a DICOM primitive value, of an arbitrary variant and multiplicity.

The base syntax is a value type identifier, which is one of the variants of PrimitiveValue, followed by either an expression resolving to one standard Rust value, or an explicitly laid out array of Rust values. The type variant may be omitted in some cases.

Passing a single expression for multiple values is not supported. Please use standard From conversions instead.

dicom_value!() // empty value
dicom_value!(«Type», «expression») // one value
dicom_value!(«Type», [«expression1», «expression2», ...]) // multiple values
dicom_value!(«expression») // a single value, inferred variant

§Examples:

Strings are automatically converted to retain ownership.

use dicom_core::value::PrimitiveValue;
use dicom_core::{DicomValue, dicom_value};

let value = dicom_value!(Str, "Smith^John");
assert_eq!(
    value,
    PrimitiveValue::Str("Smith^John".to_owned()),
);

A DICOM value may also have multiple elements:

let value = dicom_value!(Strs, [
    "Smith^John",
    "Simões^João",
]);
assert_eq!(
    value,
    PrimitiveValue::Strs([
        "Smith^John".to_string(),
        "Simões^João".to_string(),
    ][..].into()),
);
let value = dicom_value!(U16, [5, 6, 7]);
assert_eq!(
    value,
    PrimitiveValue::U16([5, 6, 7][..].into()),
);

The output is a PrimitiveValue, which can be converted to a DicomValue as long as its type parameters are specified or inferable.

// conversion to a DicomValue only requires its type parameters
// to be specified or inferable.
assert_eq!(
    DicomValue::from(value),
    DicomValue::<EmptyObject, ()>::Primitive(
        PrimitiveValue::U16([5, 6, 7][..].into())),
);