rdf_borsh/
lib.rs

1// This is free and unencumbered software released into the public domain.
2
3//! ```rust
4//! # use rdf_borsh::*;
5//! let reader = BorshReader::new(Box::new(std::io::stdin()));
6//! let writer = BorshWriter::new(Box::new(std::io::stdout()));
7//! ```
8
9#![no_std]
10#![deny(unsafe_code)]
11
12mod borsh_dataset;
13pub use borsh_dataset::*;
14
15mod borsh_header;
16pub use borsh_header::*;
17
18mod borsh_quad;
19pub use borsh_quad::*;
20
21mod borsh_reader;
22pub use borsh_reader::*;
23
24mod borsh_term;
25pub use borsh_term::*;
26
27mod borsh_term_id;
28pub use borsh_term_id::*;
29
30mod borsh_triple;
31pub use borsh_triple::*;
32
33mod borsh_writer;
34pub use borsh_writer::*;
35
36mod parse;
37pub use parse::parse_dataset;
38pub(crate) use parse::*;
39
40#[cfg(test)]
41mod tests {
42    extern crate alloc;
43    extern crate std;
44
45    // use super::*;
46    // use alloc::{boxed::Box, collections::BTreeMap, vec, vec::Vec};
47    // use borsh::io::Read;
48    // use rdf_model::{HeapQuad, HeapTerm};
49    // use rdf_writer::Writer;
50    //
51    // #[test]
52    // #[ignore = "the trait bound `HeapQuad: From<(BorshTerm, BorshTerm, BorshTerm, BorshTerm)>` is not satisfied"]
53    // fn borsh_roundtrip() -> Result<(), std::io::Error> {
54    //     let temp_file = tempfile::NamedTempFile::new().unwrap();
55    //     std::println!("{:?}", temp_file);
56    //     let mut w = BorshWriter::new(Box::new(temp_file.reopen().unwrap()))?;
57
58    //     let orig_stmts = vec![
59    //         HeapQuad::from((
60    //             HeapTerm::from("foo-1").into(),
61    //             HeapTerm::from("bar-1").into(),
62    //             HeapTerm::from("baz-1").into(),
63    //             HeapTerm::from("qux-1").into(),
64    //         )),
65    //         HeapQuad::from((
66    //             HeapTerm::from("foo-2").into(),
67    //             HeapTerm::from("bar-2").into(),
68    //             HeapTerm::from("baz-2").into(),
69    //             HeapTerm::from("qux-2").into(),
70    //         )),
71    //     ];
72
73    //     orig_stmts
74    //         .iter()
75    //         .try_for_each(|stmt| w.write_statement(stmt))
76    //         .unwrap();
77
78    //     std::println!("{:?}", w);
79
80    //     w.finish().unwrap();
81
82    //     let mut buf = Vec::new();
83    //     temp_file.reopen().unwrap().read_to_end(&mut buf).unwrap();
84    //     std::println!("{buf:?}");
85    //     let parser_stmts: Vec<HeapQuad> = {
86    //         let (terms, quads) = parse_dataset(&mut buf.as_slice()).unwrap();
87
88    //         let dict = terms.into_iter().fold(BTreeMap::new(), |mut acc, term| {
89    //             let id = BorshTermId::from(acc.len() as u16 + 1);
90    //             acc.insert(id, term);
91    //             acc
92    //         });
93
94    //         std::println!("{dict:?} ; {quads:?}");
95
96    //         quads
97    //             .into_iter()
98    //             .map(
99    //                 |BorshQuad {
100    //                      context,
101    //                      subject,
102    //                      predicate,
103    //                      object,
104    //                  }| {
105    //                     HeapQuad::from((
106    //                         dict.get(&subject).unwrap().clone(),
107    //                         dict.get(&predicate).unwrap().clone(),
108    //                         dict.get(&object).unwrap().clone(),
109    //                         dict.get(&context).unwrap().clone(),
110    //                     ))
111    //                 },
112    //             )
113    //             .collect()
114    //     };
115
116    //     let reader_stmts: Vec<HeapQuad> = {
117    //         BorshReader::new(temp_file)
118    //             .unwrap()
119    //             .collect::<Result<Vec<_>, _>>()
120    //             .unwrap()
121    //             .into_iter()
122    //             .map(|stmt| {
123    //                 HeapQuad::from((
124    //                     stmt.subject().into(),
125    //                     stmt.predicate().into(),
126    //                     stmt.object().into(),
127    //                     stmt.context().unwrap().into(),
128    //                 ))
129    //             })
130    //             .collect()
131    //     };
132
133    //     assert_eq!(orig_stmts, parser_stmts);
134    //     assert_eq!(orig_stmts, reader_stmts);
135
136    //     Ok(())
137    // }
138}