Skip to main content

Crate miniseed_rs

Crate miniseed_rs 

Source
Expand description

Pure Rust miniSEED v2 and v3 decoder and encoder.

Zero unsafe, zero C dependencies. Supports Steim1/2 compression, uncompressed INT16/32, FLOAT32/64, automatic v2/v3 format detection, CRC-32C integrity checking, and FDSN Source Identifiers.

§Decoding a record

use miniseed_rs::{decode, encode, MseedRecord, Samples};

// Build a record, encode it, then decode the bytes
let record = MseedRecord::new()
    .with_nslc("IU", "ANMO", "00", "BHZ")
    .with_sample_rate(20.0)
    .with_samples(Samples::Int(vec![100, 200, 300]));

let bytes = encode(&record).unwrap();
let decoded = decode(&bytes).unwrap();

assert_eq!(decoded.network, "IU");
assert_eq!(decoded.station, "ANMO");
assert_eq!(decoded.samples.len(), 3);

§Iterating multi-record data

use miniseed_rs::{encode, MseedRecord, MseedReader, Samples};

// Concatenate two encoded records
let r1 = MseedRecord::new()
    .with_nslc("IU", "ANMO", "00", "BHZ")
    .with_samples(Samples::Int(vec![1, 2, 3]));
let r2 = MseedRecord::new()
    .with_nslc("IU", "ANMO", "00", "BHN")
    .with_samples(Samples::Int(vec![4, 5, 6]));

let mut data = encode(&r1).unwrap();
data.extend_from_slice(&encode(&r2).unwrap());

let records: Vec<_> = MseedReader::new(&data)
    .collect::<Result<Vec<_>, _>>()
    .unwrap();

assert_eq!(records.len(), 2);
assert_eq!(records[0].channel, "BHZ");
assert_eq!(records[1].channel, "BHN");

§Building a v2 record

use miniseed_rs::{MseedRecord, Samples, EncodingFormat, BTime, NanoTime, encode};

let record = MseedRecord::new()
    .with_nslc("XX", "TEST", "00", "BHZ")
    .with_start_time(NanoTime::from_btime(&BTime {
        year: 2025, day: 100, hour: 12,
        minute: 30, second: 45, fract: 0,
    }))
    .with_sample_rate(20.0)
    .with_encoding(EncodingFormat::Int32)
    .with_samples(Samples::Int(vec![1, -2, 3, -4]));

let bytes = encode(&record).unwrap();
assert_eq!(bytes.len(), 512);

§Building a v3 record

use miniseed_rs::{MseedRecord, Samples, EncodingFormat, NanoTime, FormatVersion, encode, decode};

let record = MseedRecord::new_v3()
    .with_nslc("IU", "ANMO", "00", "BHZ")
    .with_start_time(NanoTime {
        year: 2025, day: 100, hour: 12,
        minute: 30, second: 45, nanosecond: 500_000_000,
    })
    .with_sample_rate(20.0)
    .with_encoding(EncodingFormat::Steim2)
    .with_samples(Samples::Int(vec![1, -2, 3, -4]));

let bytes = encode(&record).unwrap();
let decoded = decode(&bytes).unwrap();
assert_eq!(decoded.format_version, FormatVersion::V3);
assert_eq!(decoded.start_time.nanosecond, 500_000_000);

Re-exports§

pub use error::MseedError;
pub use error::Result;
pub use reader::MseedReader;
pub use record::MseedRecord;
pub use record::Samples;
pub use sid::SourceId;
pub use time::BTime;
pub use time::NanoTime;
pub use types::ByteOrder;
pub use types::EncodingFormat;
pub use types::FormatVersion;
pub use decode::decode;
pub use encode::encode;

Modules§

crc
CRC-32C (Castagnoli) for miniSEED v3 record integrity.
decode
Decode miniSEED records from raw bytes.
decode_v3
Decode miniSEED v3 records from raw bytes.
encode
Encode an MseedRecord into miniSEED record bytes.
encode_v3
Encode an MseedRecord into miniSEED v3 record bytes.
error
Error types for miniSEED decoding and encoding.
reader
Iterator-based reader for multi-record miniSEED data.
record
Unified miniSEED record type for v2 and v3.
sid
FDSN Source Identifier (SID) for miniSEED v3.
steim
Steim1 and Steim2 compression and decompression.
time
Nanosecond-precision timestamps for miniSEED v2 and v3.
types
Shared types: ByteOrder, EncodingFormat, and FormatVersion.