1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


use crate::error::CoreResult;

use crate::imp::structs::root_obj::RootObject;
use std::path::Path;
use dochy_archiver2::read_archive_data_from_directory;
use crate::JSON_ARC_OPT;
use crate::imp::json_to_rust::validation::validate_root::validate_root;
use crate::imp::json_to_rust::roots::archive_data_to_root::archive_data_to_root_with_hash;
use crate::imp::json_to_rust::roots::json_file_to_rust::json_file_to_rust;
use crate::imp::structs::dochy_archive::DochyArchive;

/// Converts Dochy source files to RootObject
/// Does extra checks when validation=true
pub fn json_dir_to_root_with_hash<P : AsRef<Path>>(dir_path : P, validation : bool) -> CoreResult<(RootObject, u128)> {
    let archive = json_dir_to_archive(dir_path)?;
    let (root, hash) = archive_data_to_root_with_hash(archive.data)?;
    if validation{
        validate_root(&root, false)?;
    }
    return Ok((root, hash));
}

pub fn json_dir_to_root<P : AsRef<Path>>(dir_path : P, validation : bool) -> CoreResult<RootObject> {
    json_dir_to_root_with_hash(dir_path, validation).map(|(root,_)| root)
}

pub fn json_dir_to_archive<P : AsRef<Path>>(dir_path : P) -> CoreResult<DochyArchive>{
    let data = read_archive_data_from_directory(dir_path, &JSON_ARC_OPT, json_file_to_rust)?;
    for (_name,item) in data.btree(){
        if let Err(e) = item.converted_data(){
            Err(format!("{}", e))?
        }
    }
    Ok(DochyArchive::new(data))
}