drink-next 0.8.7

Minimal sufficient architecture that allows for a fully functional ink! contract development
use std::{collections::BTreeMap, rc::Rc};

use contract_transcode::ContractMessageTranscoder;

pub struct TranscoderRegistry<Contract: Ord> {
    transcoders: BTreeMap<Contract, Rc<ContractMessageTranscoder>>,
}

impl<Contract: Ord> TranscoderRegistry<Contract> {
    pub fn new() -> Self {
        Self {
            transcoders: BTreeMap::new(),
        }
    }

    pub fn register(&mut self, contract: Contract, transcoder: &Rc<ContractMessageTranscoder>) {
        self.transcoders.insert(contract, Rc::clone(transcoder));
    }

    pub fn get(&self, contract: &Contract) -> Option<Rc<ContractMessageTranscoder>> {
        self.transcoders.get(contract).map(Rc::clone)
    }
}