Files
go-unifi/docs/codegen.md
Mateusz Filipowicz 35e7b2c3cc docs: add detailed usage documentation together with examples (#29)
* feat: rename Pass to Password in ClientConfig

* docs: add more detailed usage documentation together with examples

* chore: update issue templates

* docs: add codeowners, code of conduct and contributing docs

* chore: add editorconfig

* chore: apply linter
2025-02-18 22:36:08 +01:00

78 lines
3.9 KiB
Markdown

# Code Generation for UniFi Go SDK
The UniFi Go SDK uses a code generation process to create the client code, data models, and REST methods from JSON API
specifications. This documentation explains how to run the code generator, available parameters, and how to customize
the output using the `customizations.yml` file.
## Overview
The code generator reads the UniFi Controller API specifications (typically extracted from the UniFi Controller JAR
or JSON files) and generates Go code that includes data models, REST methods, and validation logic. The generation
process uses templates (such as `api.go.tmpl` or `client.go.tmpl`) and configuration files.
## Running the Code Generator
There are two common ways to run the code generator from the command line:
### 1. Using `go generate`
The recommended way to regenerate the client code is to use the `go generate` command. This command looks for special
comments in the source code (usually in a file such as `unifi/codegen.go`) and runs the generator as specified.
Simply navigate to the root of the project and execute:
```bash
go generate unifi/codegen.go
```
This command will:
- Parse the API specifications
- Apply the templates to generate updated models and REST methods
- Overwrite the generated files with the latest code
### 2. Running the Generator Directly with `go run`
Alternatively, you can run the code generator directly using the `go run` command. This approach bypasses `go generate`
and directly executes the generator file. For example:
```bash
go run ./codegen [OPTIONS] version
```
This command performs the same actions as the `go generate` command, but allows you to customize passed parameters as
described in the next section.
## Options
The code generator accepts the following flags, which control its behavior. These parameters can be set via command-line
flags when running the generator, either using `go run ./codegen` or through `go generate` (if configured accordingly):
| Flag | Description | Default Value |
|---------------------|----------------------------------------------------------------------------|---------------|
| `-version-base-dir` | The base directory for version JSON files | `.` |
| `-output-dir` | The output directory of the generated Go code | `.` |
| `-download-only` | Only download and build the API structures JSON directory; do not generate | |
| `-debug` | Enable debug logging | |
| `-trace` | Enable trace logging (takes precedence over `-debug` flag) | |
*Note:* These flags are defined in the main function of the code generator (see `codegen/main.go`). For further details,
consult the source code comments in that file.
## Customizing Code Generation with customizations.yml
The `customizations.yml` file is used to fine-tune the code generation process. It can be used to:
- **Override Default Mappings**: Change how certain API fields or types are mapped to Go types.
- **Exclude or Modify Endpoints**: Disable generation for specific API endpoints or alter their behavior.
### How to Use customizations.yml
1. **Edit the File**: Open `codegen/customizations.yml` in your favorite editor and modify the settings according to your needs.
The file typically contains sections for field mappings, endpoint customizations, and additional template directives.
2. **Run the Generator**: When you run the generator (using either `go generate` or `go run ./codegen`),
it will read the customizations and apply them to the generated code.
3. **Review the Output**: Check the generated files to ensure that your customizations have been applied as expected.
Adjust the `customizations.yml` file and re-run the generator if further changes are needed.