Expand description
pub_source provides the make_public! procedural macro, which rewrites a block
of Rust source code so that all top level items become public.
This macro parses the input as a full syn::File and rewrites the following kinds
of items to pub:
- functions
- structs and all of their fields
- enums
- type aliases
- constants and statics
- traits
- modules (recursively)
- impl blocks (functions, consts, type items inside them)
- unions
Non-items such as use, macros, or foreign modules are left unchanged.
This crate is also, unwrap, expect, and panic!() deny use.
§Use case
This was originally written to be injected around user-submitted code in a code runner so that unit tests could access everything the user wrote. There may be other uses but I’m not quite sure what they might be yet.
§Feature Flags
This crate provides two feature flags:
std- used for enabling stdlib support, enabled by defaultunstable- used for enabling unstable features (trait aliases, impl-associated types) on nightly compilers that are using these features
§Example
Input:
pub_source::make_public! {
fn hidden() {}
struct Thing {
a: u32,
b: String,
}
impl Thing {
fn show(&self) {
println!("{}", self.b);
}
}
}Expands to code equivalent to:
pub fn hidden() {}
pub struct Thing {
pub a: u32,
pub b: String,
}
impl Thing {
pub fn show(&self) {
println!("{}", self.b);
}
}Macros§
- make_
public - Recursively makes all top level items in a source public.