dicom_core/value/
serialize.rs1use crate::value::{DicomDate, DicomDateTime, DicomTime};
3use std::io::{Result as IoResult, Write};
4
5pub fn encode_date<W>(mut to: W, date: DicomDate) -> IoResult<usize>
9where
10 W: Write,
11{
12 let len = date.to_encoded().len();
14 write!(to, "{}", date.to_encoded())?;
15 Ok(len)
16}
17
18pub fn encode_time<W>(mut to: W, time: DicomTime) -> IoResult<usize>
22where
23 W: Write,
24{
25 let len = time.to_encoded().len();
27 write!(to, "{}", time.to_encoded())?;
28 Ok(len)
29}
30
31pub fn encode_datetime<W>(mut to: W, dt: DicomDateTime) -> IoResult<usize>
35where
36 W: Write,
37{
38 let value = dt.to_encoded();
39 let len = value.len();
40 write!(to, "{}", value)?;
41 Ok(len)
42}
43
44#[cfg(test)]
45mod test {
46 use super::*;
47 use chrono::FixedOffset;
48 use std::str::from_utf8;
49
50 #[test]
51 fn test_encode_date() {
52 let mut data = vec![];
53 encode_date(&mut data, DicomDate::from_ym(1985, 12).unwrap()).unwrap();
54 assert_eq!(&data, &*b"198512");
55 }
56
57 #[test]
58 fn test_encode_time() {
59 let mut data = vec![];
60 encode_time(
61 &mut data,
62 DicomTime::from_hms_micro(23, 59, 48, 123456).unwrap(),
63 )
64 .unwrap();
65 assert_eq!(&data, &*b"235948.123456");
66
67 let mut data = vec![];
68 encode_time(&mut data, DicomTime::from_hms(12, 0, 30).unwrap()).unwrap();
69 assert_eq!(&data, &*b"120030");
70
71 let mut data = vec![];
72 encode_time(&mut data, DicomTime::from_h(9).unwrap()).unwrap();
73 assert_eq!(&data, &*b"09");
74 }
75
76 #[test]
77 fn test_encode_datetime() {
78 let mut data = vec![];
79 let bytes = encode_datetime(
80 &mut data,
81 DicomDateTime::from_date_and_time(
82 DicomDate::from_ymd(1985, 12, 31).unwrap(),
83 DicomTime::from_hms_micro(23, 59, 48, 123_456).unwrap(),
84 )
85 .unwrap(),
86 )
87 .unwrap();
88 assert_eq!(from_utf8(&data).unwrap(), "19851231235948.123456");
89 assert_eq!(bytes, 21);
90
91 let mut data = vec![];
92 let offset = FixedOffset::east_opt(3600).unwrap();
93 let bytes = encode_datetime(
94 &mut data,
95 DicomDateTime::from_date_and_time_with_time_zone(
96 DicomDate::from_ymd(2018, 12, 24).unwrap(),
97 DicomTime::from_h(4).unwrap(),
98 offset,
99 )
100 .unwrap(),
101 )
102 .unwrap();
103 assert_eq!(from_utf8(&data).unwrap(), "2018122404+0100");
104 assert_eq!(bytes, 15);
105 }
106}