DETLEF C SDK
Native embedding and package authoring
Loading...
Searching...
No Matches
detlef_sdk.h
1/*
2 * Shared C package authoring API. MIT licensed.
3 * Define a package with DETLEF_SDK_PACKAGE() in exactly one translation unit.
4 * Setup and package builds: ../../../docs/c/index.md
5 */
6#ifndef DETLEF_SDK_A95992C2_ACAE_4E89_926F_6F692CFF5892
7#define DETLEF_SDK_A95992C2_ACAE_4E89_926F_6F692CFF5892
8
9#include <stddef.h>
10#include <stdint.h>
11
12/* Fixed-width storage; documentation links these names to their enum values. */
13#ifndef DETLEF_DOXYGEN
14typedef int32_t DetlefSdkStatus;
15typedef uint32_t DetlefSdkBool;
16typedef uint32_t DetlefSdkTypeKind;
17typedef uint32_t DetlefSdkCallableKind;
18#endif
19
29typedef uint64_t DetlefSdkValue;
37
47#ifdef DETLEF_DOXYGEN
49#else
50enum DetlefSdkStatusCode {
51#endif
54
57};
58
64#ifdef DETLEF_DOXYGEN
66#else
67enum DetlefSdkTypeKindCode {
68#endif
71
74
77};
78
84#ifdef DETLEF_DOXYGEN
86#else
87enum DetlefSdkCallableKindCode {
88#endif
91
94};
95
102#ifdef DETLEF_DOXYGEN
104#else
105enum DetlefSdkBoolCode {
106#endif
109
112};
113
114typedef struct DetlefSdkType DetlefSdkType;
115
126
128 const char *name;
129
132};
133
141#define DETLEF_SDK_TYPE(name) { DETLEF_SDK_NAMED, name, NULL }
142
149#define DETLEF_SDK_ARRAY_TYPE(inner) { DETLEF_SDK_ARRAY, NULL, inner }
150
157#define DETLEF_SDK_OPTIONAL_TYPE(inner) { DETLEF_SDK_OPTIONAL, NULL, inner }
158
168#define DETLEF_SDK_COUNT(items) (sizeof(items) / sizeof((items)[0]))
169
177#define DETLEF_SDK_TRY(operation) \
178 do { \
179 DetlefSdkStatus sdk_status_ = (operation); \
180 if (sdk_status_ != DETLEF_SDK_OK) \
181 return sdk_status_; \
182 } while (0)
183
190typedef struct DetlefSdkField {
192 const char *name;
193
197
208 DetlefSdkValue *result);
209
239
246typedef struct DetlefSdkRecord {
248 const char *name;
249
252
256
277
287static inline DetlefSdkStatus detlef_sdk_argument_count(DetlefSdkCall *call, size_t *count);
288
303static inline DetlefSdkStatus detlef_sdk_argument(DetlefSdkCall *call, size_t index, DetlefSdkValue *out);
304
316static inline DetlefSdkStatus detlef_sdk_integer(DetlefSdkCall *call, int64_t value, DetlefSdkValue *out);
317
329static inline DetlefSdkStatus detlef_sdk_float(DetlefSdkCall *call, double value, DetlefSdkValue *out);
330
343
356static inline DetlefSdkStatus detlef_sdk_string(DetlefSdkCall *call, const char *text, size_t length, DetlefSdkValue *out);
357
369
380static inline DetlefSdkStatus detlef_sdk_get_integer(DetlefSdkCall *call, DetlefSdkValue value, int64_t *out);
381
392static inline DetlefSdkStatus detlef_sdk_get_float(DetlefSdkCall *call, DetlefSdkValue value, double *out);
393
405
420static inline DetlefSdkStatus detlef_sdk_format(DetlefSdkCall *call, DetlefSdkValue value, char *output, size_t capacity, size_t *length);
421
436static inline DetlefSdkStatus detlef_sdk_array(DetlefSdkCall *call, const DetlefSdkType *type, const DetlefSdkValue *items, size_t count, DetlefSdkValue *out);
437
452static inline DetlefSdkStatus detlef_sdk_record(DetlefSdkCall *call, const char *name, const DetlefSdkValue *fields, size_t count, DetlefSdkValue *out);
453
465
479
493
506static inline DetlefSdkStatus detlef_sdk_record_get(DetlefSdkCall *call, DetlefSdkValue value, const char *field, DetlefSdkValue *out);
507
520static inline DetlefSdkStatus detlef_sdk_record_set(DetlefSdkCall *call, DetlefSdkValue value, const char *field, DetlefSdkValue item);
521
535static inline DetlefSdkStatus detlef_sdk_execute(DetlefSdkCall *call, const char *source, size_t length, DetlefSdkValue *out);
536
551
562
573static inline DetlefSdkStatus detlef_sdk_error(DetlefSdkCall *call, const char *message);
574
583static inline void *detlef_sdk_data(DetlefSdkCall *call);
584
592#define DETLEF_SDK_PACKAGE(definition) DETLEF_SDK_IMPLEMENT_PACKAGE(definition)
593
594#include "internal/sdk_common.h"
595
596#if defined(__wasm32__)
597#include "internal/sdk_wasm.h"
598#else
599#include "internal/sdk_native.h"
600#endif
601
602#endif /* DETLEF_SDK_A95992C2_ACAE_4E89_926F_6F692CFF5892 */
static DetlefSdkStatus detlef_sdk_argument(DetlefSdkCall *call, size_t index, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_argument_count(DetlefSdkCall *call, size_t *count)
static DetlefSdkStatus detlef_sdk_error(DetlefSdkCall *call, const char *message)
static DetlefSdkStatus detlef_sdk_execute(DetlefSdkCall *call, const char *source, size_t length, DetlefSdkValue *out)
static void * detlef_sdk_data(DetlefSdkCall *call)
static DetlefSdkStatus detlef_sdk_release(DetlefSdkCall *call, DetlefSdkValue value)
static DetlefSdkStatus detlef_sdk_retain(DetlefSdkCall *call, DetlefSdkValue value, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_record_get(DetlefSdkCall *call, DetlefSdkValue value, const char *field, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_array_set(DetlefSdkCall *call, DetlefSdkValue value, size_t index, DetlefSdkValue item)
static DetlefSdkStatus detlef_sdk_record_set(DetlefSdkCall *call, DetlefSdkValue value, const char *field, DetlefSdkValue item)
static DetlefSdkStatus detlef_sdk_array_get(DetlefSdkCall *call, DetlefSdkValue value, size_t index, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_record(DetlefSdkCall *call, const char *name, const DetlefSdkValue *fields, size_t count, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_array(DetlefSdkCall *call, const DetlefSdkType *type, const DetlefSdkValue *items, size_t count, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_array_length(DetlefSdkCall *call, DetlefSdkValue value, size_t *out)
DetlefSdkCallableKind
Definition detlef_sdk.h:85
DetlefSdkBool
Definition detlef_sdk.h:103
uint64_t DetlefSdkValue
Definition detlef_sdk.h:29
DetlefSdkTypeKind
Definition detlef_sdk.h:65
DetlefSdkStatus
Definition detlef_sdk.h:48
struct DetlefSdkCall DetlefSdkCall
Definition detlef_sdk.h:36
DetlefSdkStatus(* DetlefSdkCallback)(DetlefSdkCall *call, DetlefSdkValue *result)
Definition detlef_sdk.h:207
@ DETLEF_SDK_CONTROL
Definition detlef_sdk.h:93
@ DETLEF_SDK_FUNCTION
Definition detlef_sdk.h:90
@ DETLEF_SDK_TRUE
Definition detlef_sdk.h:111
@ DETLEF_SDK_FALSE
Definition detlef_sdk.h:108
@ DETLEF_SDK_ARRAY
Definition detlef_sdk.h:73
@ DETLEF_SDK_NAMED
Definition detlef_sdk.h:70
@ DETLEF_SDK_OPTIONAL
Definition detlef_sdk.h:76
@ DETLEF_SDK_ERROR
Definition detlef_sdk.h:56
@ DETLEF_SDK_OK
Definition detlef_sdk.h:53
static DetlefSdkStatus detlef_sdk_get_float(DetlefSdkCall *call, DetlefSdkValue value, double *out)
static DetlefSdkStatus detlef_sdk_get_integer(DetlefSdkCall *call, DetlefSdkValue value, int64_t *out)
static DetlefSdkStatus detlef_sdk_string(DetlefSdkCall *call, const char *text, size_t length, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_none(DetlefSdkCall *call, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_boolean(DetlefSdkCall *call, DetlefSdkBool value, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_format(DetlefSdkCall *call, DetlefSdkValue value, char *output, size_t capacity, size_t *length)
static DetlefSdkStatus detlef_sdk_float(DetlefSdkCall *call, double value, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_integer(DetlefSdkCall *call, int64_t value, DetlefSdkValue *out)
static DetlefSdkStatus detlef_sdk_get_boolean(DetlefSdkCall *call, DetlefSdkValue value, DetlefSdkBool *out)
DetlefSdkCallback callback
Definition detlef_sdk.h:225
const DetlefSdkField * parameters
Definition detlef_sdk.h:228
DetlefSdkCallableKind kind
Definition detlef_sdk.h:222
const DetlefSdkType * variadic
Definition detlef_sdk.h:234
const char * name
Definition detlef_sdk.h:219
const DetlefSdkType * type
Definition detlef_sdk.h:195
const char * name
Definition detlef_sdk.h:192
const DetlefSdkCallable * callables
Definition detlef_sdk.h:266
const DetlefSdkRecord * records
Definition detlef_sdk.h:272
size_t callable_count
Definition detlef_sdk.h:269
const char * name
Definition detlef_sdk.h:248
const DetlefSdkField * fields
Definition detlef_sdk.h:251
const DetlefSdkType * inner
Definition detlef_sdk.h:131
DetlefSdkTypeKind kind
Definition detlef_sdk.h:125
const char * name
Definition detlef_sdk.h:128