53 lines
1.2 KiB
Odin
53 lines
1.2 KiB
Odin
package szlib
|
|
|
|
import "core:encoding/json"
|
|
import "core:fmt"
|
|
import "core:os"
|
|
|
|
|
|
write_dataset_to_json :: proc(dataset: Dataset, json_path: string) -> (ok: bool) {
|
|
|
|
json_data, err := json.marshal(dataset, {pretty = true, use_enum_names = true})
|
|
if err != nil {
|
|
fmt.eprintfln("Unable to marshal JSON: %v", err)
|
|
return false
|
|
}
|
|
|
|
werr := os.write_entire_file_or_err(json_path, json_data)
|
|
if werr != nil {
|
|
fmt.eprintfln("Unable to write JSON: %v", err)
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
|
|
parse_json_to_dataset :: proc(json_path: string) -> (result: Dataset, ok: bool) {
|
|
dataset: Dataset
|
|
|
|
data, data_ok := os.read_entire_file_from_filename(json_path)
|
|
if !data_ok {
|
|
fmt.eprintln("Failed to load the file")
|
|
return dataset, false
|
|
}
|
|
defer delete(data)
|
|
|
|
json_data, err := json.parse(data)
|
|
if err != .None {
|
|
fmt.eprintln("Failed to parse JSON file.")
|
|
fmt.eprintln("Error: ", err)
|
|
return dataset, false
|
|
}
|
|
defer json.destroy_value(json_data)
|
|
|
|
root := json_data.(json.Object)
|
|
|
|
error := json.unmarshal(data, &dataset)
|
|
if error != nil {
|
|
fmt.eprintln("Could not unmarshal json data to Dataset:", error)
|
|
return dataset, false
|
|
}
|
|
|
|
return dataset, true
|
|
} |