pub enum Visibility {
Public,
Private,
}Expand description
Whether an item is visible outside the module that declares it.
Visibility gates cross-module access only: a module can always reach its own
names, public or private, but an import from another
module reaches a name only if it is Public. A
Private name reached through an import resolves to
ResolveError::Private.
§Examples
use intern_lang::Interner;
use module_lang::{ModuleGraph, ResolveError, Visibility};
use source_lang::SourceMap;
let mut sources = SourceMap::new();
let mut names = Interner::new();
let mut graph: ModuleGraph<()> = ModuleGraph::new();
let lib = graph.add_module(names.intern("lib"), sources.add("lib", "").expect("fits"));
let app = graph.add_module(names.intern("app"), sources.add("app", "").expect("fits"));
let secret = names.intern("secret");
graph.define(lib, secret, Visibility::Private, ())?;
// `lib` sees its own private name.
assert!(graph.resolve(lib, secret).is_ok());
// `app` imports it, but the import cannot reach a private name.
graph.import(app, lib, secret)?;
assert!(matches!(graph.resolve(app, secret), Err(ResolveError::Private { .. })));Variants§
Public
Resolvable from other modules through an import.
Private
Resolvable only from within the module that declares it.
Trait Implementations§
Source§impl Clone for Visibility
impl Clone for Visibility
Source§fn clone(&self) -> Visibility
fn clone(&self) -> Visibility
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for Visibility
Source§impl Debug for Visibility
impl Debug for Visibility
Source§impl<'de> Deserialize<'de> for Visibility
impl<'de> Deserialize<'de> for Visibility
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for Visibility
Source§impl Hash for Visibility
impl Hash for Visibility
Source§impl PartialEq for Visibility
impl PartialEq for Visibility
Source§fn eq(&self, other: &Visibility) -> bool
fn eq(&self, other: &Visibility) -> bool
Tests for
self and other values to be equal, and is used by ==.Source§impl Serialize for Visibility
impl Serialize for Visibility
impl StructuralPartialEq for Visibility
Auto Trait Implementations§
impl Freeze for Visibility
impl RefUnwindSafe for Visibility
impl Send for Visibility
impl Sync for Visibility
impl Unpin for Visibility
impl UnsafeUnpin for Visibility
impl UnwindSafe for Visibility
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more