#[macro_use]
extern crate quote;
extern crate proc_macro2;
pub extern crate regex;
extern crate walkdir;
mod assets;
pub mod prelude;
pub mod utils;
pub use assets::*;
use std::env;
use std::fmt::Display;
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::{Path, PathBuf};
const DEFAULT_FILENAME: &str = "assets.rs";
#[derive(Default)]
pub struct Codegen {
assets_builder: Vec<Box<Pipeline>>,
path: Option<PathBuf>,
}
impl Codegen {
pub fn new() -> Codegen {
Codegen {
assets_builder: Vec::new(),
path: env::var("OUT_DIR")
.ok()
.map(PathBuf::from)
.map(|dir| dir.join(DEFAULT_FILENAME)),
}
}
pub fn path(&self) -> Option<&Path> {
self.path.as_ref().map(PathBuf::as_path)
}
pub fn set_path<P: Into<PathBuf>>(mut self, path: P) -> Codegen {
self.path = Some(path.into());
self
}
pub fn pipelines(&self) -> &[Box<Pipeline>] {
&self.assets_builder
}
pub fn pipe(mut self, generator: Box<Pipeline>) -> Codegen {
self.assets_builder.push(generator);
self
}
pub fn write(&self) -> usize {
let path = self.path.as_ref().expect("Codegen output path not set");
let file = File::create(path).expect("Unable to open a file at the path");
let mut writer = BufWriter::new(file);
let mut written = 0;
for assets in &self.assets_builder {
written += writer
.write(assets.to_string().as_bytes())
.expect("Unable to write to Codegen file");
}
writer
.flush()
.expect("Unable to close written Codegen file");
println!("written {} bytes to {}", written, path.to_str().unwrap());
written
}
}
pub trait Pipeline: Display {}