flatcc 24.3.25

Build-time convenience utilities for flatbuffers
Documentation
use std::env;
use std::ops::{Deref, DerefMut};
use std::path::{Path, PathBuf};

pub use flatc_rust::{Args, Error, Version};

use flatc_rust::Flatc;

#[repr(transparent)]
pub struct Builder(Flatc);

impl Builder {
    pub fn new() -> Self {
        Self(Flatc::from_path(if matches!(env::var("HOST"), Ok(host) if host.contains("windows")) {
            PathBuf::from_iter([env!("OUT_DIR"), "bin", "flatc.exe"])
        } else {
            PathBuf::from_iter([env!("OUT_DIR"), "bin", "flatc"])
        }))
    }
}

impl Deref for Builder {
    type Target = Flatc;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

impl DerefMut for Builder {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}

pub fn build(path: impl AsRef<Path>) -> Result<(), Error> {
    Builder::new().run(Args {
        inputs: &[path.as_ref()],
        out_dir: Path::new(&env::var("OUT_DIR").unwrap()),
        ..Default::default()
    })
}

pub fn build_all<'a>(paths: impl IntoIterator<Item=&'a Path>) -> Result<(), Error> {
    Builder::new().run(Args {
        inputs: &paths.into_iter().collect::<Vec<_>>(),
        out_dir: Path::new(&env::var("OUT_DIR").unwrap()),
        ..Default::default()
    })
}