zxsd 0.20.0
Embedded XML Schema validation for C
Loading...
Searching...
No Matches
zxsd_bind.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Sixtaupi
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
25#ifndef ZXSD_BIND_H
26#define ZXSD_BIND_H
27
28#include "zxsd.h"
29
30#include <stddef.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
43#define ZXSD_BIND_NO_OFFSET ((size_t)(-1))
44
60
67
80
81struct zxsd_bind_type;
82
103
105typedef struct zxsd_bind_type {
106 const char *name;
107 const char *type_name;
108 const char *type_namespace;
109 size_t size;
111 size_t field_count;
113
115typedef struct {
116 const char *prefix;
117 const char *namespace_uri;
119
125typedef const zxsd_schema_t *(*zxsd_bind_schema_fn)(void);
126
138
146typedef struct {
147 unsigned char *data;
148 size_t capacity;
149 size_t used;
151
162typedef int (*zxsd_bind_sink_fn)(void *context, const char *data, size_t length);
163
171void zxsd_bind_arena_init(zxsd_bind_arena_t *arena, void *storage, size_t capacity);
172
179
181typedef struct {
182 const char *name;
183 const char *namespace_uri;
185
196
209typedef zxsd_bind_action_t (*zxsd_bind_item_fn)(void *user_data, const void *object);
210
212typedef struct {
215 void *object;
216 unsigned char path_match;
217 unsigned char seen_attributes[ZXSD_MAX_ATTRIBUTES];
219
234
236typedef struct {
238 unsigned int binding_abi;
239 size_t layouts[6];
241
243#define ZXSD_BIND_RUNTIME_CONFIG_INIT \
244 { \
245 ZXSD_RUNTIME_CONFIG_INIT, ZXSD_BINDING_ABI_VERSION, \
246 { \
247 sizeof(zxsd_bind_field_t), sizeof(zxsd_bind_type_t), \
248 sizeof(zxsd_bind_root_t), sizeof(zxsd_bind_arena_t), \
249 sizeof(zxsd_bind_stream_t), sizeof(zxsd_bind_stream_frame_t) \
250 } \
251 }
252
255
265
285 const zxsd_bind_selection_t *selection, void *object,
286 zxsd_bind_arena_t *arena, zxsd_bind_item_fn callback,
287 void *user_data, const zxsd_allocator_t *allocator);
288
296zxsd_result_t zxsd_bind_stream_feed(zxsd_bind_stream_t *reader, const void *data, size_t length);
297
304
310
331zxsd_result_t zxsd_bind_read(const zxsd_bind_root_t *root, const char *xml, void *object,
332 zxsd_bind_arena_t *arena);
333
349 void *object, zxsd_bind_arena_t *arena,
350 const zxsd_allocator_t *allocator);
351
380zxsd_result_t zxsd_bind_write(const zxsd_bind_root_t *root, const void *object,
381 zxsd_bind_sink_fn sink, void *context, zxsd_stream_t *validator);
382
399zxsd_result_t zxsd_bind_write_buffer(const zxsd_bind_root_t *root, const void *object, char *buffer,
400 size_t capacity, size_t *length);
401
418 const void *object, char *buffer,
419 size_t capacity, size_t *length,
420 const zxsd_allocator_t *allocator);
421
424#ifdef __cplusplus
425}
426#endif
427#endif
zxsd_whitespace_t
Whitespace treatment prescribed by an XML Schema simple type.
Definition zxsd.h:233
#define ZXSD_MAX_DEPTH
Maximum nesting depth accepted by the embedded XML parser.
Definition zxsd.h:36
#define ZXSD_MAX_ATTRIBUTES
Maximum number of attributes in one element.
Definition zxsd.h:47
zxsd_bind_action_t
Next action after one locally validated, typed subtree has been delivered.
Definition zxsd_bind.h:174
zxsd_result_t zxsd_bind_read_with_allocator(const zxsd_bind_root_t *root, const char *xml, void *object, zxsd_bind_arena_t *arena, const zxsd_allocator_t *allocator)
Read like zxsd_bind_read, validating with a scratch allocator.
zxsd_bind_kind_t
C representation of one bound value.
Definition zxsd_bind.h:46
zxsd_result_t zxsd_bind_stream_init(zxsd_bind_stream_t *reader, const zxsd_bind_selection_t *selection, void *object, zxsd_bind_arena_t *arena, zxsd_bind_item_fn callback, void *user_data, const zxsd_allocator_t *allocator)
Initialize a single-pass selected-subtree binding reader.
const zxsd_schema_t *(* zxsd_bind_schema_fn)(void)
Access a generated schema descriptor.
Definition zxsd_bind.h:125
void ZXSD_BINDING_ABI_GUARD(void)
Link-time binding ABI guard used by generated code; no side effects.
zxsd_bind_role_t
XML item carrying a bound value.
Definition zxsd_bind.h:62
struct zxsd_bind_type zxsd_bind_type_t
Generated descriptor for a bound structure.
void zxsd_bind_arena_init(zxsd_bind_arena_t *arena, void *storage, size_t capacity)
Initialize a reading arena over caller-provided storage.
zxsd_result_t zxsd_bind_write_buffer(const zxsd_bind_root_t *root, const void *object, char *buffer, size_t capacity, size_t *length)
Serialize a bound structure into a buffer and validate the result.
void zxsd_bind_stream_dispose(zxsd_bind_stream_t *reader)
Release identity scratch, clear output, and restore the borrowed arena.
zxsd_bind_storage_t
Storage layout of a bound member inside its structure.
Definition zxsd_bind.h:69
zxsd_bind_action_t(* zxsd_bind_item_fn)(void *user_data, const void *object)
Receive one complete, locally validated selected subtree.
Definition zxsd_bind.h:209
zxsd_result_t zxsd_bind_stream_feed(zxsd_bind_stream_t *reader, const void *data, size_t length)
Consume arbitrary raw XML bytes without retaining the fragment.
int(* zxsd_bind_sink_fn)(void *context, const char *data, size_t length)
Output callback used by zxsd_bind_write.
Definition zxsd_bind.h:162
zxsd_result_t zxsd_bind_stream_finish(zxsd_bind_stream_t *reader)
Finish parsing and validate document-wide constraints.
struct zxsd_bind_field zxsd_bind_field_t
Generated descriptor for one member of a bound structure.
zxsd_result_t zxsd_bind_write(const zxsd_bind_root_t *root, const void *object, zxsd_bind_sink_fn sink, void *context, zxsd_stream_t *validator)
Serialize a bound structure as an XML document.
zxsd_result_t zxsd_bind_read(const zxsd_bind_root_t *root, const char *xml, void *object, zxsd_bind_arena_t *arena)
Validate a document and fill a bound structure from it.
zxsd_result_t zxsd_bind_write_buffer_with_allocator(const zxsd_bind_root_t *root, const void *object, char *buffer, size_t capacity, size_t *length, const zxsd_allocator_t *allocator)
Write like zxsd_bind_write_buffer, validating with a scratch allocator.
zxsd_result_t zxsd_bind_check_runtime(const zxsd_bind_runtime_config_t *expected)
Check core configuration and binding layout sizes before using bindings.
@ ZXSD_BIND_CALLBACK_ERROR
Reject delivery with ZXSD_ERR_OUTPUT.
Definition zxsd_bind.h:177
@ ZXSD_BIND_VALIDATE_ONLY
Stop materializing, but validate the remaining document.
Definition zxsd_bind.h:176
@ ZXSD_BIND_CONTINUE
Materialize the next occurrence with the same arena.
Definition zxsd_bind.h:175
@ ZXSD_BIND_INT64
int64_t, from xs:long.
Definition zxsd_bind.h:55
@ ZXSD_BIND_BOOLEAN
bool.
Definition zxsd_bind.h:48
@ ZXSD_BIND_UINT8
uint8_t, from xs:unsignedByte.
Definition zxsd_bind.h:50
@ ZXSD_BIND_UINT32
uint32_t, from xs:unsignedInt.
Definition zxsd_bind.h:54
@ ZXSD_BIND_STRING
const char * NUL-terminated UTF-8 text.
Definition zxsd_bind.h:47
@ ZXSD_BIND_COMPLEX
Generated structure described by zxsd_bind_type_t.
Definition zxsd_bind.h:58
@ ZXSD_BIND_UINT64
uint64_t, from xs:unsignedLong.
Definition zxsd_bind.h:56
@ ZXSD_BIND_INT32
int32_t, from xs:int.
Definition zxsd_bind.h:53
@ ZXSD_BIND_ENUM
Generated C enumeration indexing a value table.
Definition zxsd_bind.h:57
@ ZXSD_BIND_INT8
int8_t, from xs:byte.
Definition zxsd_bind.h:49
@ ZXSD_BIND_UINT16
uint16_t, from xs:unsignedShort.
Definition zxsd_bind.h:52
@ ZXSD_BIND_INT16
int16_t, from xs:short.
Definition zxsd_bind.h:51
@ ZXSD_BIND_ATTRIBUTE
Attribute of the enclosing element.
Definition zxsd_bind.h:63
@ ZXSD_BIND_CONTENT
Character content of a simpleContent element.
Definition zxsd_bind.h:65
@ ZXSD_BIND_ELEMENT
Child element.
Definition zxsd_bind.h:64
@ ZXSD_BIND_POINTER
The member is a const pointer to one item; NULL means absent.
Definition zxsd_bind.h:76
@ ZXSD_BIND_INLINE
The value is stored in the member itself.
Definition zxsd_bind.h:74
@ ZXSD_BIND_ARRAY
The member is a const pointer to items with a size_t count member.
Definition zxsd_bind.h:78
Optional allocator used by validation features requiring scratch storage.
Definition zxsd.h:180
Caller-owned bump allocator used when reading a document.
Definition zxsd_bind.h:146
size_t used
Number of bytes already allocated.
Definition zxsd_bind.h:149
unsigned char * data
First byte of the arena storage.
Definition zxsd_bind.h:147
size_t capacity
Number of bytes in data.
Definition zxsd_bind.h:148
Generated descriptor for one member of a bound structure.
Definition zxsd_bind.h:84
const char * default_value
Schema default value, or NULL.
Definition zxsd_bind.h:100
zxsd_whitespace_t whitespace
Normalization applied when reading.
Definition zxsd_bind.h:99
const char * fixed_value
Schema fixed value, or NULL.
Definition zxsd_bind.h:101
unsigned long min_occurs
Minimum occurrences, zero when optional.
Definition zxsd_bind.h:90
size_t presence_offset
Offset of the bool presence member.
Definition zxsd_bind.h:93
const char * name
XML local name.
Definition zxsd_bind.h:85
size_t value_size
Size of one stored value or array item.
Definition zxsd_bind.h:95
zxsd_bind_kind_t kind
C value representation.
Definition zxsd_bind.h:88
size_t offset
Offset of the value, pointer or array member.
Definition zxsd_bind.h:92
zxsd_bind_storage_t storage
Member layout.
Definition zxsd_bind.h:89
size_t count_offset
Offset of the size_t count member.
Definition zxsd_bind.h:94
size_t enumeration_count
Number of enumeration values.
Definition zxsd_bind.h:98
const char * namespace_uri
XML namespace URI, or NULL.
Definition zxsd_bind.h:86
zxsd_bind_role_t role
Attribute, child element or content.
Definition zxsd_bind.h:87
const char *const * enumeration
Lexical values of an enumeration.
Definition zxsd_bind.h:97
unsigned long max_occurs
Maximum occurrences, or ULONG_MAX.
Definition zxsd_bind.h:91
const struct zxsd_bind_type * type
Nested structure for complex values.
Definition zxsd_bind.h:96
Namespace prefix declared on the root element when writing.
Definition zxsd_bind.h:115
const char * namespace_uri
Namespace URI bound to prefix.
Definition zxsd_bind.h:117
const char * prefix
Generated prefix.
Definition zxsd_bind.h:116
One generation-time-resolved element step; prefixes are not identities.
Definition zxsd_bind.h:181
const char * namespace_uri
Namespace URI, or NULL.
Definition zxsd_bind.h:183
const char * name
Element local name.
Definition zxsd_bind.h:182
Generated descriptor for a bound global element.
Definition zxsd_bind.h:128
const char * fixed_value
Root fixed content, or NULL.
Definition zxsd_bind.h:136
const char * namespace_uri
Root namespace URI, or NULL.
Definition zxsd_bind.h:130
const zxsd_bind_type_t * type
Root structure descriptor.
Definition zxsd_bind.h:131
size_t namespace_count
Number of entries in namespaces.
Definition zxsd_bind.h:134
const char * name
Root local name.
Definition zxsd_bind.h:129
zxsd_bind_schema_fn schema
Generated validation descriptor accessor.
Definition zxsd_bind.h:132
const char * default_value
Root default content, or NULL.
Definition zxsd_bind.h:135
const zxsd_bind_namespace_t * namespaces
Prefixes declared on the root.
Definition zxsd_bind.h:133
Binding-specific layout stamp; initialize with ZXSD_BIND_RUNTIME_CONFIG_INIT.
Definition zxsd_bind.h:236
zxsd_runtime_config_t runtime
Core epochs, limits, and layouts.
Definition zxsd_bind.h:237
unsigned int binding_abi
Typed binding epoch.
Definition zxsd_bind.h:238
Immutable selection emitted by zxsdc --stream-bind.
Definition zxsd_bind.h:187
const char * fixed_value
Selected element fixed value, or NULL.
Definition zxsd_bind.h:194
size_t step_count
Number of path steps.
Definition zxsd_bind.h:190
const char * default_value
Selected element default, or NULL.
Definition zxsd_bind.h:193
const zxsd_bind_type_t * type
Selected structure; simple selections have a value member.
Definition zxsd_bind.h:192
const zxsd_bind_path_step_t * steps
Absolute element path, including the root.
Definition zxsd_bind.h:189
zxsd_bind_schema_fn schema
Full document schema, including unselected content.
Definition zxsd_bind.h:188
Internal binding frame, exposed only for static allocation.
Definition zxsd_bind.h:212
unsigned char path_match
Absolute selection prefix matches through this depth.
Definition zxsd_bind.h:216
void * object
Caller/arena storage receiving this element.
Definition zxsd_bind.h:215
const zxsd_bind_field_t * field
Scalar element descriptor, if any.
Definition zxsd_bind.h:214
const zxsd_bind_type_t * type
Complex or simpleContent structure, if any.
Definition zxsd_bind.h:213
Single-pass validating typed reader with caller-owned, reusable storage.
Definition zxsd_bind.h:221
size_t arena_mark
Arena usage restored after delivery/error/dispose.
Definition zxsd_bind.h:228
void * object
Caller-owned selected structure.
Definition zxsd_bind.h:225
const zxsd_bind_selection_t * selection
Generated selection.
Definition zxsd_bind.h:223
void * user_data
Application context.
Definition zxsd_bind.h:227
zxsd_bind_arena_t * arena
Arena borrowed until dispose.
Definition zxsd_bind.h:224
size_t active_depth
Selected element depth, or zero.
Definition zxsd_bind.h:229
int finished
Whether finish completed successfully.
Definition zxsd_bind.h:231
int validate_only
Whether further materialization is disabled.
Definition zxsd_bind.h:230
zxsd_bind_item_fn callback
Typed delivery adapter.
Definition zxsd_bind.h:226
zxsd_xml_reader_t xml
Raw parser and full-document validator.
Definition zxsd_bind.h:222
Generated descriptor for a bound structure.
Definition zxsd_bind.h:105
const zxsd_bind_field_t * fields
Attributes, then elements, then content.
Definition zxsd_bind.h:110
size_t field_count
Number of entries in fields.
Definition zxsd_bind.h:111
const char * type_namespace
Named XSD type namespace, or NULL.
Definition zxsd_bind.h:108
const char * type_name
Named XSD type, or NULL if anonymous.
Definition zxsd_bind.h:107
const char * name
Generated C type name, for diagnostics.
Definition zxsd_bind.h:106
size_t size
Size of the structure.
Definition zxsd_bind.h:109
Structured result returned by every generated validator.
Definition zxsd.h:153
Caller configuration stamp for a same-toolchain runtime boundary.
Definition zxsd.h:655
Root descriptor consumed by the generic validation runtime.
Definition zxsd.h:487
Bounded state for the event-driven validator.
Definition zxsd.h:571
Bounded raw-XML reader feeding an event-driven validator.
Definition zxsd.h:626
Public API for the zxsd XML validation runtime.