drink 0.18.0

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

use contract_transcode::ContractMessageTranscoder;

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

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

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

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