1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//! # libmseed bindings for Rust.
//!
//! This library contains bindings to the [libmseed][1] C library which is used
//! to manage miniSEED data. The library itself is a work in progress and is
//! likely lacking some bindings here and there, so be warned.
//!
//! [1]: https://github.com/EarthScope/libmseed
//!
//! The mseed library strives to be as close to libmseed as possible, but also
//! strives to make using libmseed as safe as possible. All resource management
//! is automatic as well as adding strong types to all interfaces (including
//! `MSResult`).
//!
//! ## High-level miniSEED record I/O
//!
//! Reading and writing miniSEED records is implemented by means of [`MSReader`] and [`MSWriter`],
//! respectively.
//!
//! ```no_run
//! use std::fs::OpenOptions;
//!
//! use mseed::{MSControlFlags, MSReader, MSWriter};
//!
//! let mut reader =
//! MSReader::new_with_flags("path/to/in.mseed", MSControlFlags::MSF_UNPACKDATA).unwrap();
//!
//! let out_file = OpenOptions::new().write(true).open("out.mseed").unwrap();
//! let mut writer = MSWriter::new(out_file);
//!
//! while let Some(msr) = reader.next() {
//! let msr = msr.unwrap();
//!
//! if msr.network().unwrap() == "NET" && msr.station().unwrap() == "STA" {
//! // do something with msr
//!
//! writer
//! .write_record(&msr, MSControlFlags::MSF_FLUSHDATA)
//! .unwrap();
//! }
//! }
//! ```
//!
//!
//! ## Low-level miniSEED record I/O
//!
//! Creating miniSEED records from raw data samples is possible using the low-level [`pack_raw()`]
//! function:
//!
//! ```no_run
//! use std::fs::OpenOptions;
//! use std::io::{BufWriter, Write};
//!
//! use time::format_description::well_known::Iso8601;
//! use time::OffsetDateTime;
//!
//! use mseed::{self, MSControlFlags, PackInfo};
//!
//! let pack_info = PackInfo::new("FDSN:XX_TEST__X_Y_Z").unwrap();
//!
//! let file = OpenOptions::new()
//! .create(true)
//! .write(true)
//! .open("path/to/out.mseed")
//! .unwrap();
//! let mut writer = BufWriter::new(file);
//!
//! let record_handler = move |rec: &[u8]| {
//! let _ = writer.write(rec);
//! };
//!
//! let mut data_samples: Vec<i32> = (1..100).collect();
//! let start_time = OffsetDateTime::parse("2012-01-01T00:00:00Z", &Iso8601::DEFAULT).unwrap();
//! mseed::pack_raw(
//! &mut data_samples,
//! &start_time,
//! record_handler,
//! &pack_info,
//! MSControlFlags::MSF_FLUSHDATA,
//! )
//! .unwrap();
//! ```
use bitflags;
use libmseed_sys as raw;
pub use crateMSError;
pub use crate;
pub use crate;
pub use crate;
pub use crate;
pub use crate;
/// A specialized library `Result` type.
pub type MSResult<T> = Result;
/// An enumeration of possible errors that can happen when working with miniSEED records.
bitflags!