kotlin_poet_rs/spec/
visibility_modifier.rs

1use crate::io::RenderKotlin;
2use crate::spec::CodeBlock;
3use crate::tokens;
4
5/// Represents [Kotlin's visibility modifier](https://kotlinlang.org/docs/visibility-modifiers.html)
6///
7/// Defaults to [VisibilityModifier::Public].
8/// Lack of visibility modifier means that the member is public.
9#[derive(PartialEq, Debug, Clone, Default)]
10pub enum VisibilityModifier {
11    /// `public` means that any client who sees the declaring class sees its `public` members.
12    #[default]
13    Public,
14    /// `internal` means that any client inside this module who sees the declaring class sees its `internal` members.
15    Internal,
16    /// `private` means that the member is visible inside this class only (including all its members).
17    Private,
18    /// `protected` means that the member has the same visibility as one marked as private, but that it is also visible in subclasses.
19    Protected,
20}
21
22impl RenderKotlin for VisibilityModifier {
23    fn render_into(&self, block: &mut CodeBlock) {
24        let keyword = match self {
25            VisibilityModifier::Public => tokens::keyword::PUBLIC,
26            VisibilityModifier::Internal => tokens::keyword::INTERNAL,
27            VisibilityModifier::Private => tokens::keyword::PRIVATE,
28            VisibilityModifier::Protected => tokens::keyword::PROTECTED
29        };
30
31        block.push_atom(keyword);
32    }
33}