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}