1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use crate::writer::IndentWriter;
use crate::Error;
use std::fs::File;
use std::path::Path;
/// Main entry point for backends to generate language bindings.
///
/// This trait will be implemented by each backend and is the main way to interface with a generator.
pub trait Interop {
/// Generates FFI binding code and writes them to the [`IndentWriter`].
fn write_to(&self, w: &mut IndentWriter) -> Result<(), Error>;
/// Convenience method to write FFI bindings to the specified file with default indentation.
fn write_file<P: AsRef<Path>>(&self, file_name: P) -> Result<(), Error> {
let mut file = File::create(file_name)?;
let mut writer = IndentWriter::new(&mut file);
self.write_to(&mut writer)
}
}