14
14
15
15
use crate :: prelude:: * ;
16
16
use core;
17
+ use core:: convert:: TryFrom ;
17
18
18
19
use crate :: io;
19
20
@@ -158,16 +159,12 @@ impl TapTree {
158
159
/// # Returns
159
160
/// A [`TapTree`] iff the `builder` is complete, otherwise return [`IncompleteTapTree`]
160
161
/// error with the content of incomplete `builder` instance.
162
+ #[ deprecated( since = "0.29.0" , note = "use try_from instead" ) ]
161
163
pub fn from_builder ( builder : TaprootBuilder ) -> Result < Self , IncompleteTapTree > {
162
- if !builder. is_finalized ( ) {
163
- Err ( IncompleteTapTree :: NotFinalized ( builder) )
164
- } else if builder. has_hidden_nodes ( ) {
165
- Err ( IncompleteTapTree :: HiddenParts ( builder) )
166
- } else {
167
- Ok ( TapTree ( builder) )
168
- }
164
+ Self :: try_from ( builder)
169
165
}
170
166
167
+
171
168
/// Converts self into builder [`TaprootBuilder`]. The builder is guaranteed to be finalized.
172
169
pub fn into_builder ( self ) -> TaprootBuilder {
173
170
self . 0
@@ -194,6 +191,25 @@ impl TapTree {
194
191
}
195
192
}
196
193
194
+ impl TryFrom < TaprootBuilder > for TapTree {
195
+ type Error = IncompleteTapTree ;
196
+
197
+ /// Constructs [`TapTree`] from a [`TaprootBuilder`] if it is complete binary tree.
198
+ ///
199
+ /// # Returns
200
+ /// A [`TapTree`] iff the `builder` is complete, otherwise return [`IncompleteTapTree`]
201
+ /// error with the content of incomplete `builder` instance.
202
+ fn try_from ( builder : TaprootBuilder ) -> Result < Self , Self :: Error > {
203
+ if !builder. is_finalized ( ) {
204
+ Err ( IncompleteTapTree :: NotFinalized ( builder) )
205
+ } else if builder. has_hidden_nodes ( ) {
206
+ Err ( IncompleteTapTree :: HiddenParts ( builder) )
207
+ } else {
208
+ Ok ( TapTree ( builder) )
209
+ }
210
+ }
211
+ }
212
+
197
213
/// Iterator for a taproot script tree, operating in DFS order over leaf depth and
198
214
/// leaf script pairs.
199
215
pub struct TapTreeIter < ' tree > {
0 commit comments