cbindgen 0.4.1

A tool for generating C bindings to Rust code.
Documentation
use std::ops::Deref;
use std::io::Write;

use syn;

use bindgen::config::{Config, Language};
use bindgen::writer::{Source, SourceWriter};

#[derive(Default, Debug, Clone)]
pub struct GenericParams(pub Vec<String>);

impl GenericParams {
    pub fn new(generics: &syn::Generics) -> Self {
        GenericParams(
            generics
                .ty_params
                .iter()
                .map(|x| x.ident.to_string())
                .collect::<Vec<_>>(),
        )
    }
}

impl Deref for GenericParams {
    type Target = [String];

    fn deref(&self) -> &[String] {
        &self.0
    }
}

impl Source for GenericParams {
    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
        if !self.0.is_empty() {
            if config.language == Language::Cxx {
                out.write("template<");
                for (i, item) in self.0.iter().enumerate() {
                    if i != 0 {
                        out.write(", ");
                    }
                    write!(out, "typename {}", item);
                }
                out.write(">");
                out.new_line();
            }
        }
    }
}