kotlin_poet_rs/spec/
annotation_target.rs

1use crate::io::RenderKotlin;
2use crate::spec::CodeBlock;
3use crate::tokens;
4
5/// Specifies exactly where this annotation will be applied.
6/// Missing targets are represented as [Option<AnnotationTarget>]
7///
8/// [Kotlin documentation reference](https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets)
9#[derive(Debug, Clone)]
10pub enum AnnotationTarget {
11    /// Annotation applied to file
12    File,
13    /// Annotation applied to property.
14    /// Annotations with this target are not visible to Java.
15    /// If you need Java visibility use [AnnotationTarget::Field]
16    Property,
17    /// Annotation applied to backing field of the property
18    Field,
19    /// Property getter
20    Get,
21    /// Property setter
22    Set,
23    /// Receiver parameter of an extension function or property
24    Receiver,
25    /// Constructor parameter
26    Param,
27    /// Property setter parameter
28    SetParam,
29    /// The field storing the delegate instance for a delegated property
30    Delegate,
31}
32
33impl RenderKotlin for AnnotationTarget {
34    fn render_into(&self, block: &mut CodeBlock) {
35        let atom = match self {
36            AnnotationTarget::File => tokens::keyword::FILE,
37            AnnotationTarget::Property => tokens::keyword::PROPERTY,
38            AnnotationTarget::Field => tokens::keyword::FIELD,
39            AnnotationTarget::Get => tokens::keyword::GET,
40            AnnotationTarget::Set => tokens::keyword::SET,
41            AnnotationTarget::Receiver => tokens::keyword::RECEIVER,
42            AnnotationTarget::Param => tokens::keyword::PARAM,
43            AnnotationTarget::SetParam => tokens::keyword::SET_PARAM,
44            AnnotationTarget::Delegate => tokens::keyword::DELEGATE,
45        };
46        block.push_atom(atom)
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use crate::io::RenderKotlin;
53    use crate::spec::AnnotationTarget;
54
55    #[test]
56    fn test_annotation_target() {
57        assert_eq!(AnnotationTarget::Field.render_string(), "field");
58        assert_eq!(AnnotationTarget::File.render_string(), "file");
59        assert_eq!(AnnotationTarget::Get.render_string(), "get");
60        assert_eq!(AnnotationTarget::Param.render_string(), "param");
61        assert_eq!(AnnotationTarget::Property.render_string(), "property");
62        assert_eq!(AnnotationTarget::Receiver.render_string(), "receiver");
63        assert_eq!(AnnotationTarget::Set.render_string(), "set");
64        assert_eq!(AnnotationTarget::SetParam.render_string(), "setparam");
65        assert_eq!(AnnotationTarget::Delegate.render_string(), "delegate");
66    }
67}