[][src]Crate marc

Library to work with the MARC 21 Format for Bibliographic Data

Examples

Reading

let input = fs::File::open("test/fixtures/3records.mrc")?;
let mut count = 0;

for (i, record) in Records::new(input).enumerate() {
    let record = dbg!(record?);
    match i {
        0 => assert_eq!(record.field(b"001")[0].get_data::<str>(), "000000002"),
        1 => assert_eq!(record.field(b"001")[0].get_data::<str>(), "000000005"),
        2 => assert_eq!(record.field(b"001")[0].get_data::<str>(), "000000009"),
        _ => panic!(),
    }
    count += 1;
}

assert_eq!(count, 3);

Creating

let mut builder = RecordBuilder::new();
let record = builder
    .add_fields(fields!(
        control fields: [
            b"001" => "000000002",
            b"003" => "RuMoRGB",
        ];
        data fields: [
            b"979", b"  ", [
                b'a' => "autoref",
                b'a' => "dlopen",
            ],
        ];
    ))?
    .get_record()?;
assert_eq!(record.as_ref(), b"00100nam  2200061 i 4500001001000000003000800010\
    979002000018\x1E000000002\x1ERuMoRGB\x1E  \x1Faautoref\x1Fadlopen\x1E\x1D");

Updating

let input = fs::File::open("test/fixtures/3records.mrc")?;
let orig_record = Records::new(input).next().expect("should be here")?;
let mut builder = RecordBuilder::from_record(&orig_record);
let record = builder
    // we'll replace `001`
    .filter_fields(|f| f.get_tag() != "001")
    .add_field((b"001", "foo"))?
    // we'll remove `979a` with value `dlopen` (note that an empty `979` will remain)
    .filter_subfields(|_, sf| sf.get_tag() != "979" ||
        sf.get_identifier() != 'a' ||
        sf.get_data::<str>() != "dlopen")
    .get_record()?;

assert_eq!(record.as_ref(), "01339nam a2200301 i 45000010004000000030008000040050017000120080\
    041000290170023000700350025000930400026001180410008001440720019001520840027001710840029001\
    980840029002271000076002562450352003322600025006843000011007096500092007207870038008128520\
    03400850852003400884856010400918979001201022979000301034\x1efoo\x1eRuMoRGB\x1e201507161647\
    15.0\x1e911009s1990    ru ||||  a    |00 u rus d\x1e  \x1fa91-8563А\x1fbRuMoRKP\x1e  \x1fa\
    (RuMoRGB)DIS-0000114\x1e  \x1faRuMoRGB\x1fbrus\x1fcRuMoRGB\x1e0 \x1farus\x1e 7\x1fa07.00.0\
    3\x1f2nsnr\x1e  \x1faЭ38-36-021.4,0\x1f2rubbk\x1e  \x1faТ3(6Ег)63-4,02\x1f2rubbk\x1e  \x1f\
    aТ3(5Ср)63-4,02\x1f2rubbk\x1e1 \x1faАбдувахитов, Абдужабар Абдусаттарович\x1e00\x1fa\"Брат\
    ья-мусульмане\" на общественно-политической арене Египта и Сирии в 1928-1963 гг. :\x1fbавт\
    ореферат дис. ... кандидата исторических наук : 07.00.03\x1fcАбдувахитов Абдужабар Абдусат\
    тарович ; Ташк. гос. ун-т\x1e  \x1faТашкент\x1fc1990\x1e  \x1fa17 с.\x1e 7\x1faВсеобщая ис\
    тория (соответствующего периода)\x1f2nsnr\x1e18\x1fw008120708\x1fiДиссертация\x1e4 \x1faРГ\
    Б\x1fbFB\x1fj9 91-4/2388-x\x1fx71\x1e4 \x1faРГБ\x1fbFB\x1fj9 91-4/2389-8\x1fx70\x1e41\x1fq\
    application/pdf\x1fuhttp://dlib.rsl.ru/rsl01000000000/rsl01000000000/rsl01000000002/rsl010\
    00000002.pdf\x1e  \x1faautoref\x1e  \x1e\x1d".as_bytes());

Re-exports

pub use errors::*;

Modules

errors

Macros

fields

Intended to use with RecordBuilder::add_fields.

Structs

Field

View into a field of a MARC record

FieldRepr

MARC field representation

Fields

Iterator over fields of a record.

Identifier

Subfield identifier

Indicator

Variable data field indicator.

Record

Parsed MARC Record.

RecordBuilder

Record builder.

Records

Reads records from an io::Read implementor.

Subfield

View into a subfield of a MARC field

Subfields

Iterator over subfields of a field.

Tag

Tag of a field

Enums

BibliographicLevel
CharacterCodingScheme
DescriptiveCatalogingForm
EncodingLevel
MultipartResourceRecordLevel
RecordStatus
TypeOfControl
TypeOfRecord

Traits

FromFieldData
WriteRecordExt

Write Record Extension on io::Write