Generate structured code for APIs and documentation
Project description
Structured API
Define a bare structured API, useful for interfaces that don't need to be portable across multiple platforms. E.G. embedded applications targeting a single architecture.
Usage
Basic Usage
Define the API in TOML or another markup language.
[file]
brief = 'Command set for a thermostat'
description = 'Provides basic debug commands for a thermostat. Allows for both imperial and metric units.'
[commands]
description = "Debug commands for thermostat"
display_name = "Thermostat command"
type = "group"
[cmd_reset]
description = "Request a software reset"
display_name = "reset request"
size = 0
type = "structure"
groups.commands = { value = 1, name = "reset" }
[cmd_temperature_set]
description = "Request a change in temperature"
display_name = "Request temperature change"
members = [
{ name = "temperature", size = 2, type = 'int', description = 'Desired temperature' },
{ name = "units", size = 1, type = 'temperature_units', description = 'Selected temperature unit' },
]
size = 3
type = "structure"
groups.commands = { value = 2, name = "temperature_set" }
This will generate code that looks like this for c by default
/**
* @file
* @brief Command set for a thermostat
*
* Provides basic debug commands for a thermostat. Allows for both imperial and
* metric units.
*
* @note This file is autogenerated using structured_api
*/
#ifndef STRUCTURES_H_
#define STRUCTURES_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <static_assert.h>
#include <stdint.h>
/// commands tag
/// Enumeration for commands tag
typedef enum commands_tag_e {
/// @see cmd_reset_t
commands_tag_reset = 0x1,
/// @see cmd_temperature_set_t
commands_tag_temperature_set = 0x2,
} commands_tag_t;
STATIC_ASSERT_TYPE_SIZE(commands_tag_t, 1);
/// reset request
/// Request a software reset
typedef struct cmd_reset_s {
/// Structure is intentionally empty (zero sized)
uint8_t empty[0];
} cmd_reset_t;
STATIC_ASSERT_TYPE_SIZE(cmd_reset_t, 0);
/// Request temperature change
/// Request a change in temperature
typedef struct cmd_temperature_set_s {
/// Desired temperature
int16_t temperature;
/// Selected temperature unit
temperature_units_t units;
} cmd_temperature_set_t;
STATIC_ASSERT_TYPE_SIZE(cmd_temperature_set_t, 3);
/// Thermostat command
/// Debug commands for thermostat
typedef struct commands_u_s {
/// commands tag
commands_tag_t tag;
union {
/// Request a software reset
cmd_reset_t reset;
/// Request a change in temperature
cmd_temperature_set_t temperature_set;
} value;
} commands_u_t;
STATIC_ASSERT_TYPE_SIZE(commands_u_t, 4);
#ifdef __cplusplus
}
#endif
#endif // STRUCTURES_H_
An example is given in the examples folder:
struct-writer --input-definition examples/structures.toml --output-file examples/output/structures.h
Customizable templates
Code generation is customizable using templates. If no templates are provided, we use the default C template.
The default template is shown in the examples folder.
struct-writer --input-definition examples/structures.toml --output-file examples/output/structures.h --template-file examples/template.toml
Multiple templates
Chain templates together to more tightly specify certain files in a project. For example if a certain file needs specific includes.
struct-writer --input-definition examples/structures.toml --output-file examples/output/structures.h --template-file examples/template.toml --template-file examples/packed_templates.toml
development
watchexec.exe --clear --restart --debounce 500 --exts py,toml "isort . && black . && pytest && struct-writer --input-definition examples/structures.toml --template-files examples/template.toml --output-file examples/output/structures.h && pylint ."
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file struct_writer-0.4.6.tar.gz
.
File metadata
- Download URL: struct_writer-0.4.6.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.6 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | abd18f07b061a99143f04ab67b7decd13de1ace33cac91becf3411fc5fe30de0 |
|
MD5 | fc3ebbf4f32db55a1d975385b402d118 |
|
BLAKE2b-256 | b394e56dcd4e15fcbbefd4f7c8ff843c3a73d618aca66046551882fbed133a66 |
File details
Details for the file struct_writer-0.4.6-py3-none-any.whl
.
File metadata
- Download URL: struct_writer-0.4.6-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.6 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e89d9ff6f8c159b2635598452f6c9dd8ef50509a92ddff21ef77e963ea2f5a5b |
|
MD5 | a408bbe08b09a4362d6ec2e2e6c3cbd4 |
|
BLAKE2b-256 | d4100f5bdbe22b6039beb7bfc7393fe75622b0299778ce4edf19a9234d6c5002 |