qualia_cli/ingest/
json_mapper.rs1use qualia_core_db::sparql_library::parsers::json_parser::{
2 parse_json_to_quins, JsonDatatype, JsonFieldMapping, JsonMappingProfile,
3};
4use std::fs::File;
5use std::io::BufReader;
6
7pub fn stream_json_to_quins(
8 json_path: &str,
9 output_path: &str,
10 profile: &super::mapper::MappingProfile,
11) {
12 let mut writer = super::writer::SuperBlockWriter::new(std::path::Path::new(output_path))
13 .expect("Failed to create SuperBlockWriter");
14 let file = File::open(json_path).expect("Failed to open JSON file");
15 let reader = BufReader::new(file);
16
17 let core_profile = JsonMappingProfile {
19 base_class_hash: profile.base_class_hash,
20 fields: profile
21 .fields
22 .iter()
23 .map(|f| JsonFieldMapping {
24 source_key: f.source_key.clone(),
25 predicate_hash: f.predicate_hash,
26 datatype: match f.datatype {
27 super::mapper::TargetDatatype::Integer => JsonDatatype::Integer,
28 super::mapper::TargetDatatype::Float => JsonDatatype::Float,
29 super::mapper::TargetDatatype::DateTime => JsonDatatype::DateTime,
30 super::mapper::TargetDatatype::StringRef => JsonDatatype::StringRef,
31 },
32 })
33 .collect(),
34 };
35
36 parse_json_to_quins(reader, &core_profile, |quin| {
38 writer.push(quin).expect("Failed to write to SuperBlock");
39 })
40 .expect("Failed to parse JSON");
41}