pub_source

Crates.iopub_source
lib.rspub_source
version0.1.2
created_at2025-12-04 21:45:12.744791+00
updated_at2025-12-05 03:48:39.668555+00
descriptionMake everything public
homepage
repositoryhttps://github.com/TabulateJarl8/pub_source
max_upload_size
id1967094
size57,602
Tabulate (TabulateJarl8)

documentation

README

pub_source - Make Everything Public

pub_source logo

crates.io version License GitHub Issues docs.rs build status GitHub Workflow Status

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 also denies the use of unwrap, expect, and panic!().

Usage

cargo add pub_source

Then the crate can be used as follows:

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);
    }
}

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 default
  • unstable - used for enabling unstable features (trait aliases, impl-associated types) on nightly compilers that are using these features

License

This crate is licensed under the MIT license

Commit count: 0

cargo fmt