Skip to main content

qualia_cli/ingest/
json_mapper.rs

1use 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    // Convert CLI profile to core-db profile
18    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    // Use core-db parser
37    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}