Skip to content

Commit cec3081

Browse files
committed
Add decoding of programs
1 parent e0571aa commit cec3081

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/core/commit.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
1414
//
1515

16+
use crate::bititer::BitIter;
1617
use crate::core::iter::DagIterable;
1718
use crate::core::node::NodeInner;
1819
use crate::core::{Node, Value};
1920
use crate::decode::WitnessIterator;
2021
use crate::jet::{Application, JetNode};
2122
use crate::merkle::cmr::Cmr;
2223
use crate::merkle::{cmr, imr};
23-
use crate::{analysis, impl_ref_wrapper, inference, Error};
24+
use crate::{analysis, decode, impl_ref_wrapper, inference, Error};
2425
use std::collections::HashMap;
2526
use std::rc::Rc;
2627

@@ -440,6 +441,13 @@ impl<Witness, App: Application> CommitNode<Witness, App> {
440441
}
441442
}
442443

444+
impl<App: Application> CommitNode<(), App> {
445+
/// Decode a Simplicity program from bits.
446+
pub fn decode<I: Iterator<Item = u8>>(bits: &mut BitIter<I>) -> Result<Rc<Self>, Error> {
447+
decode::decode_program_no_witness(bits)
448+
}
449+
}
450+
443451
/// Wrapper of references to [`CommitNode`].
444452
#[derive(Debug)]
445453
pub struct RefWrapper<'a, Witness, App: Application>(pub &'a CommitNode<Witness, App>);

src/core/node.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
1313
//
1414

15+
use crate::bititer::BitIter;
1516
use crate::core::types::Type;
16-
use crate::impl_ref_wrapper;
17+
use crate::core::{CommitNode, Value};
18+
use crate::decode::WitnessDecoder;
1719
use crate::jet::{Application, JetNode};
1820
use crate::merkle::cmr::Cmr;
1921
use crate::merkle::imr::Imr;
22+
use crate::{impl_ref_wrapper, Error};
2023
use std::rc::Rc;
2124
use std::sync::Arc;
2225

@@ -144,6 +147,15 @@ impl<Witness, App: Application> Node<Witness, App> {
144147
}
145148
}
146149

150+
impl<App: Application> Node<Value, App> {
151+
/// Decode a Simplicity program from bits.
152+
pub fn decode<I: Iterator<Item = u8>>(bits: &mut BitIter<I>) -> Result<Rc<Self>, Error> {
153+
let commit = CommitNode::decode(bits).expect("decode program");
154+
let witness = WitnessDecoder::new(bits).expect("decode witness");
155+
commit.finalize(witness)
156+
}
157+
}
158+
147159
/// Wrapper of references to [`Node`].
148160
#[derive(Debug)]
149161
pub struct RefWrapper<'a, Witness, App: Application>(pub &'a Node<Witness, App>);

0 commit comments

Comments
 (0)