ergo_lib_wasm/
context_extension.rs1use crate::ast::Constant;
4use ergo_lib::ergotree_ir::serialization::SigmaSerializable;
5use wasm_bindgen::prelude::*;
6
7extern crate derive_more;
8use derive_more::{From, Into};
9
10#[wasm_bindgen]
12#[derive(PartialEq, Eq, Debug, Clone, From, Into)]
13pub struct ContextExtension(
14 ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension,
15);
16
17#[wasm_bindgen]
18impl ContextExtension {
19 #[wasm_bindgen(constructor)]
21 pub fn new() -> Self {
22 Self(ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension::empty())
23 }
24
25 pub fn set_pair(&mut self, id: u8, value: &Constant) {
27 self.0.values.insert(id, value.clone().into());
28 }
29
30 pub fn len(&self) -> usize {
32 let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
33 self.0.clone();
34 wrapped.values.len()
35 }
36 pub fn get(&self, key: u8) -> Result<Constant, JsValue> {
38 let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
39 self.0.clone();
40 Ok(wrapped
41 .values
42 .get(&key)
43 .ok_or_else::<JsValue, _>(|| "err".into())?
44 .clone()
45 .into())
46 }
47
48 pub fn keys(&self) -> Vec<u8> {
50 let wrapped: ergo_lib::ergotree_interpreter::sigma_protocol::prover::ContextExtension =
51 self.0.clone();
52 wrapped.values.keys().cloned().collect()
53 }
54
55 pub fn sigma_serialize_bytes(&self) -> Result<Vec<u8>, JsValue> {
57 self.0
58 .sigma_serialize_bytes()
59 .map_err(|e| JsValue::from_str(&format! {"{:?}", e}))
60 }
61}