What are annotations?
Simply put, an annotation is a way to attach metadata to certain features in the code that can subsequently be accessed at compile time within a macro. Crystal comes bundled with some built-in annotations that you may have already worked with, such as @[JSON::Field]
or the @[Link]
annotation, which was covered in Chapter 7, C Interoperability. While both of these annotations are included by default, they do differ in regard to their behavior. For example, the JSON::Field
annotation exists in Crystal's standard library and is implemented/used in a way that you could replicate in your own code with your own annotation. The Link
annotation, on the other hand, has a special relationship with the Crystal compiler and some of its behavior cannot be reproduced in user code.
Custom annotations can be defined via the annotation
keyword:
annotation MyAnnotation; end
That is all there is to it. The annotation could then be applied to various items, including...