Skip to content

Commit

Permalink
Add few examples (fix #6)
Browse files Browse the repository at this point in the history
  • Loading branch information
blackbeam committed Jan 27, 2021
1 parent 78022e5 commit 6b6591c
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
95 changes: 95 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,98 @@
//! # Library to work with the MARC 21 Format for Bibliographic Data
//!
//! ## Examples
//!
//! ### Reading
//!
//! ```rust
//! # use marc::*;
//! # use std::{io, fs};
//! # fn main() -> marc::Result<()> {
//! 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);
//! # marc::Result::Ok(())
//! # }
//! ```
//!
//! ### Creating
//!
//! ```rust
//! # use marc::*;
//! # use std::{io, fs};
//! # fn main() -> marc::Result<()> {
//! 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");
//! # marc::Result::Ok(())
//! # }
//! ```
//!
//! ### Updating
//!
//! ```rust
//! # use marc::*;
//! # use std::{io, fs};
//! # fn main() -> marc::Result<()> {
//! 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());
//!
//! # marc::Result::Ok(())
//! # }
//! ```

#![warn(missing_debug_implementations, rust_2018_idioms, future_incompatible)]
#![cfg_attr(feature = "nightly", feature(test))]
#![recursion_limit = "1024"]
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/3records.mrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
01353nam a2200301 i 4500001001000000003000800010005001700018008004100035017002300076035002500099040002600124041000800150072001900158084002700177084002900204084002900233100007600262245035200338260002500690300001100715650009200726787003800818852003400856852003400890856010400924979001201028979001101040000000002RuMoRGB20150716164715.0911009s1990 ru |||| a |00 u rus d a91-8563АbRuMoRKP a(RuMoRGB)DIS-0000114 aRuMoRGBbruscRuMoRGB0 arus 7a07.00.032nsnr aЭ38-36-021.4,02rubbk aТ3(6Ег)63-4,022rubbk aТ3(5Ср)63-4,022rubbk1 aАбдувахитов, Абдужабар Абдусаттарович00a"Братья-мусульмане" на общественно-политической арене Египта и Сирии в 1928-1963 гг. :bавтореферат дис. ... кандидата исторических наук : 07.00.03cАбдувахитов Абдужабар Абдусаттарович ; Ташк. гос. ун-т aТашкентc1990 a17 с. 7aВсеобщая история (соответствующего периода)2nsnr18w008120708iДиссертация4 aРГБbFBj9 91-4/2388-xx714 aРГБbFBj9 91-4/2389-8x7041qapplication/pdfuhttp://dlib.rsl.ru/rsl01000000000/rsl01000000000/rsl01000000002/rsl01000000002.pdf aautoref adlopen01130nam a2200277 i 4500001001000000003000800010005001700018008004100035017002300076035002500099040002600124041000800150072001900158084002200177100005400199245028000253260002900533300001100562650004600573787003800619852003400657852003400691856010400725979001200829979001100841000000005RuMoRGB20170201165925.0910724s1991 ru |||| a |00 u rus d a91-4733АbRuMoRKP a(RuMoRGB)DIS-0000215 aRuMoRGBbruscRuMoRGB0 arus 7a02.00.032nsnr aГ276.22,02rubbk1 aАбрамов, Михаил Аркадьевич00a1-диалкиламиноэтенселенолаты и их аналоги в реакциях с нитрилиминами :bавтореферат дис. ... кандидата химических наук : 02.00.03cЛенинградский технол. ин-т aЛенинградc1991 a20 с. 7aОрганическая химия2nsnr18w008078023iДиссертация4 aРГБbFBj9 91-2/4111-0x704 aРГБbFBj9 91-2/4112-9x7041qapplication/pdfuhttp://dlib.rsl.ru/rsl01000000000/rsl01000000000/rsl01000000005/rsl01000000005.pdf aautoref adlopen01379nam a2200277 i 4500001001000000003000800010005001700018008004100035017002400076035002500100040002600125041000800151072001900159084002500178100007000203245049100273260003900764300001100803650009700814787003800911852003400949852003400983852004001017852003201057979001201089000000009RuMoRGB20161129095017.0890912s1989 ru |||| a |00 u rus d a89-14423АbRuMoRKP a(RuMoRGB)DIS-0000937 aRuMoRGBbruscRuMoRGB0 arus 7a05.22.072nsnr aО812-048.9,02rubbk1 aАвдовский, Александр Александрович00aАнализ динамического взаимодействия жестких комбинированных автосцепок вагонов метрополитена и совершенствование их конструкции :bавтореферат дис. ... кандидата технических наук : 05.22.07cА. А. Авдовский ; Днепропетровский ин-т инженеров ж.-д. трансп. им. М. И. Калинина aДнепропетровскc1989 a20 с. 7aПодвижной состав железный дорог и тяга поездов2nsnr18w008247279iДиссертация4 aРГБbFBj9 89-6/1512-6x704 aРГБbFBj9 89-6/1513-4x704 aРГБbMKjМК МКК-8/89-Гx814 aРГБbOMF2jФ 1/1651x81 aautoref

0 comments on commit 6b6591c

Please sign in to comment.