class FASTCodec extends AbstractCodec {

    @Override
	public void init(
			IServiceContext serviceContext,
			ICommonSettings settings,
			IMessageFactory msgFactory, IDictionaryStructure dictionary) {

        this.serviceContext = Objects.requireNonNull(serviceContext, "'Service context' parameter cannot be null");
        this.msgDictionary = Objects.requireNonNull(dictionary, "'dictionary' parameter cannot be null");
        String fastTemplate = Objects.requireNonNull(getAttributeValue(dictionary, FASTMessageHelper.TEMPLATE_ATTRIBYTE), "'Template attribute' parameter");
        this.settings = (FASTCodecSettings)Objects.requireNonNull(settings, "'settings' parameter cannot be null");
        SailfishURI dictionaryName = Objects.requireNonNull(this.settings.getDictionaryName(), "'Dictionary name' parameter");
        IDataManager dataManager = Objects.requireNonNull(this.serviceContext.getDataManager(), "'Data manager' parameter");
        FastTemplateLoader templateLoader = new FastTemplateLoader();
        this.registry = templateLoader.loadFastTemplates(dataManager, dictionaryName.getPluginAlias(), fastTemplate);
        this.converter = new FastToIMessageConverter(msgFactory, msgDictionary);
        this.decoder = new FastToIMessageDecoder(converter, this.settings.getSkipInitialByteAmount());
    }

}