bitcoin-cash 1.0.0-beta.0

A library for creating and parsing Bitcoin Cash trasactions
Documentation
use crate::{Op, Script, TaggedOp};
use std::borrow::Cow;

pub trait Ops {
    fn ops(&self) -> Cow<[TaggedOp]>;
}

pub struct TaggedScript<O: Ops> {
    tagged_ops: Vec<TaggedOp>,
    input_params: std::marker::PhantomData<O>,
}

impl<O: Ops> TaggedScript<O> {
    pub fn new(tagged_ops: Vec<TaggedOp>) -> Self {
        TaggedScript {
            tagged_ops,
            input_params: std::marker::PhantomData,
        }
    }

    pub fn script_ops(&self) -> impl Iterator<Item = &Op> {
        self.tagged_ops.iter().map(|op| &op.op)
    }

    pub fn script(self) -> Script {
        Script::new(self.tagged_ops)
    }
}

impl<O: Ops> Ops for TaggedScript<O> {
    fn ops(&self) -> Cow<[TaggedOp]> {
        self.tagged_ops.as_slice().into()
    }
}

impl<O: Ops> Clone for TaggedScript<O> {
    fn clone(&self) -> Self {
        TaggedScript::new(self.tagged_ops.clone())
    }
}

impl<O: Ops> From<TaggedScript<O>> for Script {
    fn from(script: TaggedScript<O>) -> Self {
        Script::new(script.tagged_ops)
    }
}