microcad_lang/syntax/
visibility.rs

1// Copyright © 2024-2025 The µcad authors <info@ucad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! Visibility of an entity.
5
6/// Visibility of an entity.
7///
8/// This is used to determine if an entity is public or private.
9/// By default, entities are private.
10#[derive(Copy, Clone, Default, PartialEq)]
11pub enum Visibility {
12    /// Private visibility
13    #[default]
14    Private,
15    /// Public visibility
16    Public,
17    /// Mark symbol for deletion {used internally while resolving)
18    Deleted,
19}
20
21impl std::fmt::Display for Visibility {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        match self {
24            Visibility::Private => Ok(()),
25            Visibility::Public => write!(f, "pub "),
26            Visibility::Deleted => write!(f, "(deleted) "),
27        }
28    }
29}
30
31impl std::fmt::Debug for Visibility {
32    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33        match self {
34            Visibility::Private => Ok(()),
35            Visibility::Public => write!(f, "pub "),
36            Visibility::Deleted => write!(f, "❌ "),
37        }
38    }
39}