protospec-build 0.3.0

One binary format language to rule them all, One binary format language to find them, One binary format language to bring them all and in the darkness bind them.
Documentation
use crate::{result::*, ForeignFunctionObj, ForeignTransformObj, ForeignTypeObj};

pub trait ImportResolver {
    fn normalize_import(&self, import: &str) -> Result<String>;

    fn resolve_import(&self, import: &str) -> Result<Option<String>>;

    fn resolve_ffi_transform(&self, name: &str) -> Result<Option<ForeignTransformObj>>;

    fn resolve_ffi_type(&self, name: &str) -> Result<Option<ForeignTypeObj>>;

    fn resolve_ffi_function(&self, name: &str) -> Result<Option<ForeignFunctionObj>>;
}

pub struct NullImportResolver;

impl ImportResolver for NullImportResolver {
    fn normalize_import(&self, import: &str) -> Result<String> {
        Ok(import.to_string())
    }

    fn resolve_import(&self, _import: &str) -> Result<Option<String>> {
        Err(protospec_err!("null import resolver"))
    }

    fn resolve_ffi_transform(&self, _transform: &str) -> Result<Option<ForeignTransformObj>> {
        Err(protospec_err!("null import resolver"))
    }

    fn resolve_ffi_type(&self, _type: &str) -> Result<Option<ForeignTypeObj>> {
        Err(protospec_err!("null import resolver"))
    }

    fn resolve_ffi_function(&self, _type: &str) -> Result<Option<ForeignFunctionObj>> {
        Err(protospec_err!("null import resolver"))
    }
}