@@ -282,7 +282,7 @@ pub struct NodeDefaults {
282282///
283283/// See [the book](https://tskit-dev.github.io/tskit-rust/)
284284/// for details.
285- #[derive(Debug, Clone, Default )]
285+ #[derive(Debug, Clone)]
286286pub struct NodeDefaultsWithMetadata<M>
287287where
288288 M: crate::metadata::NodeMetadata,
@@ -293,6 +293,23 @@ where
293293 pub metadata: Option<M>,
294294}
295295
296+ // Manual implementation required so that
297+ // we do not force client code to impl Default
298+ // for metadata types.
299+ impl<M> Default for NodeDefaultsWithMetadata<M>
300+ where
301+ M: crate::metadata::NodeMetadata,
302+ {
303+ fn default() -> Self {
304+ Self {
305+ flags: NodeFlags::default(),
306+ population: PopulationId::default(),
307+ individual: IndividualId::default(),
308+ metadata: None,
309+ }
310+ }
311+ }
312+
296313mod private {
297314 pub trait DefaultNodeDataMarker {}
298315
@@ -362,12 +379,6 @@ where
362379/// value: i32,
363380/// }
364381///
365- /// impl Default for NodeMetadata {
366- /// fn default() -> Self {
367- /// Self{value: 0}
368- /// }
369- /// }
370- ///
371382/// impl tskit::metadata::MetadataRoundtrip for NodeMetadata {
372383/// fn encode(&self) -> Result<Vec<u8>, tskit::metadata::MetadataError> {
373384/// match serde_json::to_string(self) {
@@ -404,12 +415,6 @@ where
404415/// value: i32,
405416/// }
406417///
407- /// impl Default for NodeMetadata {
408- /// fn default() -> Self {
409- /// Self{value: 0}
410- /// }
411- /// }
412- ///
413418/// impl tskit::metadata::MetadataRoundtrip for NodeMetadata {
414419/// fn encode(&self) -> Result<Vec<u8>, tskit::metadata::MetadataError> {
415420/// match serde_json::to_string(self) {
0 commit comments