cglue-gen 0.2.0

FFI safe code generation for making plugins and C-compatible libraries
Documentation
use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use std::collections::HashMap;
use syn::{Ident, Path};

pub fn get_impl(parent_path: &Path, out: &mut Vec<(Path, TokenStream)>) {
    let cur_path = super::super::join_paths(parent_path, format_ident!("convert"));

    out.push((
        cur_path,
        quote! {
            pub trait AsRef<T> {
                fn as_ref(&self) -> &T;
            }
            pub trait AsMut<T> {
                fn as_mut(&mut self) -> &mut T;
            }
        },
    ));
}

pub fn get_exports(parent_path: &Path, exports: &mut HashMap<Ident, Path>) {
    let cur_path = super::super::join_paths(parent_path, format_ident!("convert"));
    exports.insert(format_ident!("AsRef"), cur_path.clone());
    exports.insert(format_ident!("AsMut"), cur_path);
}