# Meta Programming

For most use cases, the default API @option is sufficient, however, there are some specific cases requires one to use Configurations's advanced API on meta programming.

## Custom Option Macro

In some cases, you may not want all the features we defined by default in Configurations.

In this case, you can construct your own macro using the code generation passes defined in Configurations. The code generation passes API starts with codegen_. You combine them as a codegen pipeline.

Configurations uses an intermediate representation defined by Expronicon to represent user defined option types, which is the JLKwStruct struct.