diff --git a/crates/tree/Cargo.toml b/crates/tree/Cargo.toml index af3c53b..c7ad408 100644 --- a/crates/tree/Cargo.toml +++ b/crates/tree/Cargo.toml @@ -8,11 +8,14 @@ repository.workspace = true license.workspace = true [dependencies] -automerge = "0.7.4" -autosurgeon = "0.10.1" +automerge = {version = "0.7.4", optional = true} +autosurgeon = {version = "0.10.1", optional = true} serde.workspace = true +[features] +automerge = ["dep:automerge", "dep:autosurgeon"] + [lints.clippy] pedantic = "deny" nursery = "deny" diff --git a/crates/tree/src/lib.rs b/crates/tree/src/lib.rs index bc674b0..478d554 100644 --- a/crates/tree/src/lib.rs +++ b/crates/tree/src/lib.rs @@ -5,7 +5,6 @@ //! //! TODO: add example usage -use autosurgeon::{Hydrate, Reconcile}; use serde::{Deserialize, Serialize}; mod behaviors; @@ -32,9 +31,8 @@ pub use iterators::PreOrderTraversalIds; pub use error::NodeIdError; /// A Node Id -#[derive( - Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, Reconcile, Hydrate, -)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "automerge", derive(Reconcile, Hydrate))] pub struct NodeId { index: u32, } diff --git a/crates/tree/src/node.rs b/crates/tree/src/node.rs index 26e3a89..074174a 100644 --- a/crates/tree/src/node.rs +++ b/crates/tree/src/node.rs @@ -1,9 +1,9 @@ -use autosurgeon::{Hydrate, Reconcile}; use serde::{Deserialize, Serialize}; use crate::NodeId; -#[derive(Debug, Serialize, Deserialize, Reconcile, Hydrate, Ord, Eq, PartialOrd)] +#[derive(Debug, Serialize, Deserialize, Ord, Eq, PartialOrd)] +#[cfg_attr(feature = "automerge", derive(Reconcile, Hydrate))] pub struct Node { pub(crate) data: T, pub(crate) parent: Option, diff --git a/crates/tree/src/tree.rs b/crates/tree/src/tree.rs index fb327fa..acc8fe9 100644 --- a/crates/tree/src/tree.rs +++ b/crates/tree/src/tree.rs @@ -1,6 +1,5 @@ use std::cmp::Ordering; -use autosurgeon::{Hydrate, Reconcile}; use serde::{Deserialize, Serialize}; use crate::{ @@ -156,7 +155,11 @@ impl TreeBuilder { /// Any function that takes a `NodeId` can `panic`, but this should /// only happen with improper `NodeId` management within `tree`, and /// should have nothing to do with library user's code. -#[derive(Debug, Serialize, Deserialize, Reconcile, Hydrate)] +#[derive(Debug, Serialize, Deserialize)] +#[cfg_attr( + feature = "automerge", + derive(autosurgeon::Reconcile, autosurgeon::Hydrate) +)] pub struct Tree { root: Option, pub(crate) nodes: Vec>>,