diff --git a/src/_macros.rs b/src/_macros.rs index bec6d8cf1..d36705fda 100644 --- a/src/_macros.rs +++ b/src/_macros.rs @@ -380,30 +380,6 @@ macro_rules! handle_metadata_return { }; } -#[cfg(feature = "provenance")] -#[cfg_attr(doc_cfg, doc(cfg(feature = "provenance")))] -macro_rules! provenance_table_add_row { - ($(#[$attr:meta])* => $name: ident, $self: ident, $table: expr) => { - $(#[$attr])* - pub fn $name(&mut $self, record: &str) -> Result<$crate::ProvenanceId, $crate::TskitError> { - if record.is_empty() { - return Err($crate::TskitError::ValueError{got: "empty string".to_string(), expected: "provenance record".to_string()}) - } - let timestamp = humantime::format_rfc3339(std::time::SystemTime::now()).to_string(); - let rv = unsafe { - $crate::bindings::tsk_provenance_table_add_row( - $table, - timestamp.as_ptr() as *mut i8, - timestamp.len() as tsk_size_t, - record.as_ptr() as *mut i8, - record.len() as tsk_size_t, - ) - }; - handle_tsk_return_value!(rv, rv.into()) - } - }; -} - macro_rules! raw_metadata_getter_for_tables { ($idtype: ty) => { fn raw_metadata>(&self, row: I) -> Option<&[u8]> { diff --git a/src/provenance.rs b/src/provenance.rs index 0035267db..adcec71ff 100644 --- a/src/provenance.rs +++ b/src/provenance.rs @@ -297,7 +297,25 @@ impl ProvenanceTable { self.table_.clear().map_err(|e| e.into()) } - provenance_table_add_row!(=> add_row, self, self.as_mut_ptr()); + pub fn add_row(&mut self, record: &str) -> Result { + if record.is_empty() { + return Err(crate::TskitError::ValueError { + got: "empty string".to_string(), + expected: "provenance record".to_string(), + }); + } + let timestamp = humantime::format_rfc3339(std::time::SystemTime::now()).to_string(); + let rv = unsafe { + crate::bindings::tsk_provenance_table_add_row( + self.as_mut_ptr(), + timestamp.as_ptr() as *mut i8, + timestamp.len() as tsk_size_t, + record.as_ptr() as *mut i8, + record.len() as tsk_size_t, + ) + }; + handle_tsk_return_value!(rv, rv.into()) + } } impl Default for ProvenanceTable { diff --git a/src/table_collection.rs b/src/table_collection.rs index ca8b1d1d1..4268970d9 100644 --- a/src/table_collection.rs +++ b/src/table_collection.rs @@ -1031,9 +1031,6 @@ impl TableCollection { handle_tsk_return_value!(rv) } - #[cfg(feature = "provenance")] - #[cfg_attr(doc_cfg, doc(cfg(feature = "provenance")))] - provenance_table_add_row!( /// Add provenance record with a time stamp. /// /// All implementation of this trait provided by `tskit` use @@ -1050,7 +1047,7 @@ impl TableCollection { /// /// # Examples /// ``` - /// + /// /// let mut tables = tskit::TableCollection::new(1000.).unwrap(); /// # #[cfg(feature = "provenance")] { /// tables.add_provenance(&String::from("Some provenance")).unwrap(); @@ -1082,7 +1079,11 @@ impl TableCollection { /// assert_eq!(treeseq.provenances().record(0).unwrap(), row_0.record); /// # } /// ``` - => add_provenance, self, &mut (*self.as_mut_ptr()).provenances); + #[cfg(feature = "provenance")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "provenance")))] + pub fn add_provenance(&mut self, record: &str) -> Result { + self.provenances_mut().add_row(record) + } /// Set the edge table from an [`OwningEdgeTable`](`crate::OwningEdgeTable`) ///