#![forbid(unsafe_code)]
pub(crate) mod builder_impl;
mod emit;
mod format;
mod json_impl;
mod message_impl;
mod options;
pub(crate) mod text_impl;
pub(crate) mod type_registry;
pub mod wkt_map;
pub use options::{CodegenError, CodegenOptions};
pub use emit::{emit_file_descriptor_set, emit_file_descriptor_set_with_options, ModuleTree};
pub fn generate(fds: &prost_types::FileDescriptorSet) -> Result<String, CodegenError> {
emit::emit_file_descriptor_set(fds)
}
pub fn generate_with_options(
fds: &prost_types::FileDescriptorSet,
options: &CodegenOptions,
) -> Result<String, CodegenError> {
let code = emit::emit_file_descriptor_set_with_options(fds, options)?;
#[cfg(feature = "format")]
let code = if options.format_output {
crate::format::format_source(&code)?
} else {
code
};
Ok(code)
}
pub fn generate_module(
fds: &prost_types::FileDescriptorSet,
options: &CodegenOptions,
) -> Result<ModuleTree, CodegenError> {
emit::generate_module_tree(fds, options)
}
pub fn generate_to_file(
fds: &prost_types::FileDescriptorSet,
path: &std::path::Path,
) -> Result<(), CodegenError> {
let code = generate(fds)?;
std::fs::write(path, code).map_err(CodegenError::Io)
}
pub fn generate_to_file_with_options(
fds: &prost_types::FileDescriptorSet,
path: &std::path::Path,
options: &CodegenOptions,
) -> Result<(), CodegenError> {
let code = generate_with_options(fds, options)?;
std::fs::write(path, code).map_err(CodegenError::Io)
}
pub fn generate_to_writer<W: std::io::Write>(
fds: &prost_types::FileDescriptorSet,
options: &CodegenOptions,
writer: &mut W,
) -> Result<(), CodegenError> {
let code = generate_with_options(fds, options)?;
writer.write_all(code.as_bytes()).map_err(CodegenError::Io)
}
pub fn generate_to_writer_default<W: std::io::Write>(
fds: &prost_types::FileDescriptorSet,
writer: &mut W,
) -> Result<(), CodegenError> {
generate_to_writer(fds, &CodegenOptions::default(), writer)
}