Visibilidade

Módulos são limitadores de privacidade:

  • Itens do módulo são privados por padrão (ocultam detalhes de implementação).
  • Itens paternos e fraternos são sempre visíveis.
  • Em outras palavras, se um item é visível no módulo foo, ele é visível em todos os descendentes de foo.
mod outer {
    fn private() {
        println!("outer::private");
    }

    pub fn public() {
        println!("outer::public");
    }

    mod inner {
        fn private() {
            println!("outer::inner::private");
        }

        pub fn public() {
            println!("outer::inner::public");
            super::private();
        }
    }
}

fn main() {
    outer::public();
}
This slide should take about 5 minutes.
  • Use a palavra reservada pub para tornar módulos públicos.

Adicionamente, existem especificadores pub(...) avançados para restringir o escopo de visibilidade pública.

  • Veja a Referência Rust.
  • A configuração de visibilidade pub(crate) é um padrão comum.
  • Menos comum, você pode dar visibilidade para um caminho específico.
  • Em todo caso, a visibilidade deve ser concedida a um módulo ancestral (e a todos os seus descendentes).