rd-rds 0.0.1

Read-only reader for the subset of R's RDS serialization format used by installed-package help databases
Documentation
use flate2::read::GzDecoder;
use rd_rds::{RValue, parse};
use std::io::Read;

#[test]
fn raw_access_uses_stable_constructors_accessors_and_wildcards() {
    let bytes = include_bytes!("fixtures/data/rd_minimal_v3.rds");
    let mut decoder = GzDecoder::new(bytes.as_slice());
    let mut decompressed = Vec::new();
    decoder
        .read_to_end(&mut decompressed)
        .expect("fixture gzip stream");
    let object = parse(&decompressed).expect("decompressed fixture");
    walk(&object);
}

fn walk(object: &rd_rds::RObject) {
    for attribute in object.attributes().iter() {
        walk(attribute.value());
    }
    match object.value() {
        RValue::List(values) => values.iter().for_each(walk),
        RValue::Character(_) | RValue::Null => {}
        RValue::Logical(_) | RValue::Integer(_) | RValue::Real(_) => {}
        RValue::Symbol(_) | RValue::Persisted(_) | RValue::Environment(_) => {}
        _ => {}
    }
}