From c070547773a4388c20984b331feeb499b3a786fb Mon Sep 17 00:00:00 2001 From: Philipp Rehner Date: Thu, 20 Jan 2022 18:52:24 +0100 Subject: [PATCH 1/2] Read a list of segment records directly from a file --- src/parameter/mod.rs | 2 +- src/parameter/segment.rs | 14 ++++++++++++++ src/python/parameter.rs | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/parameter/mod.rs b/src/parameter/mod.rs index 273fdc5..8c29876 100644 --- a/src/parameter/mod.rs +++ b/src/parameter/mod.rs @@ -287,7 +287,7 @@ where // Read segment records let segment_records: Vec> = - serde_json::from_reader(BufReader::new(File::open(file_segments)?))?; + SegmentRecord::from_json(file_segments)?; // Read binary records let binary_records = file_binary diff --git a/src/parameter/segment.rs b/src/parameter/segment.rs index c6e7292..f87b7a8 100644 --- a/src/parameter/segment.rs +++ b/src/parameter/segment.rs @@ -1,5 +1,10 @@ +use super::ParameterError; +use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; +use std::fs::File; use std::hash::{Hash, Hasher}; +use std::io::BufReader; +use std::path::Path; /// Parameters describing an individual segment of a molecule. #[derive(Serialize, Deserialize, Debug, Clone)] @@ -25,6 +30,15 @@ impl SegmentRecord { ideal_gas_record, } } + + /// Read a list of `SegmentRecord`s from a JSON file. + pub fn from_json>(file: P) -> Result, ParameterError> + where + I: DeserializeOwned, + M: DeserializeOwned, + { + Ok(serde_json::from_reader(BufReader::new(File::open(file)?))?) + } } impl Hash for SegmentRecord { diff --git a/src/python/parameter.rs b/src/python/parameter.rs index d4ae3e6..acd7ad3 100644 --- a/src/python/parameter.rs +++ b/src/python/parameter.rs @@ -482,6 +482,24 @@ macro_rules! impl_segment_record { ))) } + /// Read a list of `SegmentRecord`s from a JSON file. + /// + /// Parameters + /// ---------- + /// path : str + /// Path to file containing the segment records. + /// + /// Returns + /// ------- + /// SegmentRecord + #[staticmethod] + fn from_json(path: &str) -> Result, ParameterError> { + Ok(SegmentRecord::from_json(path)? + .into_iter() + .map(|s| Self(s)) + .collect()) + } + #[getter] fn get_identifier(&self) -> String { self.0.identifier.clone() From a3ed78499c2ad30eb030362f11042e6a4b8935d7 Mon Sep 17 00:00:00 2001 From: Philipp Rehner Date: Thu, 20 Jan 2022 18:58:34 +0100 Subject: [PATCH 2/2] add text_signature --- src/python/parameter.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python/parameter.rs b/src/python/parameter.rs index acd7ad3..810a84b 100644 --- a/src/python/parameter.rs +++ b/src/python/parameter.rs @@ -493,6 +493,7 @@ macro_rules! impl_segment_record { /// ------- /// SegmentRecord #[staticmethod] + #[pyo3(text_signature = "(path)")] fn from_json(path: &str) -> Result, ParameterError> { Ok(SegmentRecord::from_json(path)? .into_iter()