pivot-pdf 0.6.0

A low-overhead PDF generation library for reports, invoices, and documents
Documentation
use pivot_pdf::objects::{ObjId, PdfObject};

#[test]
fn obj_id_equality() {
    let a = ObjId(1, 0);
    let b = ObjId(1, 0);
    let c = ObjId(2, 0);
    assert_eq!(a, b);
    assert_ne!(a, c);
}

#[test]
fn name_constructor() {
    let obj = PdfObject::name("Type");
    match obj {
        PdfObject::Name(s) => assert_eq!(s, "Type"),
        _ => panic!("expected Name"),
    }
}

#[test]
fn literal_string_constructor() {
    let obj = PdfObject::literal_string("Hello");
    match obj {
        PdfObject::LiteralString(s) => assert_eq!(s, "Hello"),
        _ => panic!("expected LiteralString"),
    }
}

#[test]
fn reference_constructor() {
    let obj = PdfObject::reference(5, 0);
    match obj {
        PdfObject::Reference(id) => {
            assert_eq!(id, ObjId(5, 0));
        }
        _ => panic!("expected Reference"),
    }
}

#[test]
fn dict_constructor() {
    let obj = PdfObject::dict(vec![
        ("Type", PdfObject::name("Catalog")),
        ("Pages", PdfObject::reference(2, 0)),
    ]);
    match obj {
        PdfObject::Dictionary(entries) => {
            assert_eq!(entries.len(), 2);
            assert_eq!(entries[0].0, "Type");
            assert_eq!(entries[1].0, "Pages");
        }
        _ => panic!("expected Dictionary"),
    }
}

#[test]
fn array_constructor() {
    let obj = PdfObject::array(vec![PdfObject::reference(3, 0), PdfObject::reference(6, 0)]);
    match obj {
        PdfObject::Array(items) => assert_eq!(items.len(), 2),
        _ => panic!("expected Array"),
    }
}

#[test]
fn stream_constructor() {
    let data = b"BT /F1 12 Tf ET".to_vec();
    let obj = PdfObject::stream(vec![("Filter", PdfObject::name("None"))], data.clone());
    match obj {
        PdfObject::Stream { dict, data: d } => {
            assert_eq!(dict.len(), 1);
            assert_eq!(d, data);
        }
        _ => panic!("expected Stream"),
    }
}