use crate::{AstNode, Span};
use std::ops::Deref;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Visibility {
pub kind: VisibilityKind,
span: Span,
}
impl Visibility {
pub fn new(kind: VisibilityKind, span: Span) -> Self {
Self { kind, span }
}
pub fn private() -> Self {
Self {
kind: VisibilityKind::Private,
span: Span::default(),
}
}
pub fn public() -> Self {
Self {
kind: VisibilityKind::Public,
span: Span::default(),
}
}
pub fn inherited() -> Self {
Self {
kind: VisibilityKind::Inherited,
span: Span::default(),
}
}
}
impl Deref for Visibility {
type Target = VisibilityKind;
fn deref(&self) -> &VisibilityKind {
&self.kind
}
}
impl AstNode for Visibility {
fn span(&self) -> Span {
self.span
}
fn print(&self, indent: usize) -> String {
let stringified = match self.kind {
VisibilityKind::Inherited => "inherited".to_string(),
VisibilityKind::Public => "pub".to_string(),
VisibilityKind::Private => "private".to_string(),
};
format!("{}{}", " ".repeat(indent), stringified)
}
}
#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
pub enum VisibilityKind {
#[default]
Inherited,
Public,
Private,
}
#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
pub enum Ownership {
SharedOwned,
#[default]
Borrowed,
MutBorrowed,
UniqueOwned,
Ref,
}
#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
pub enum Async {
Async,
#[default]
Inherited,
Generic,
}
#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
pub enum Const {
Const,
#[default]
Inherited,
Generic,
}