Skip to content

C FFI

Please Read First

Before proceeding, make sure to read this Overview page to get a better understanding of the documentation.

Artifacts

Shared library and header file are available on the release page

Header file

pulumi_gestalt.h
#ifndef __PULUMI_H__
#define __PULUMI_H__

/* Don't modify this file manually. It is autogenerated by cbindgen. */

#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

typedef struct pulumi_output_t pulumi_output_t;

typedef struct pulumi_register_output_t pulumi_register_output_t;

typedef struct pulumi_engine_t pulumi_engine_t;

/**
 * Arguments: Engine context, Function context, Serialized JSON value
 * Returned string must represent a JSON value;
 * Library will free the returned string
 */
typedef char *(*pulumi_mapping_function_t)(const void*, const void*, const char*);

typedef struct pulumi_object_field_t {
  const char *name;
  const struct pulumi_output_t *value;
} pulumi_object_field_t;

typedef struct pulumi_register_resource_request_t {
  const char *type_;
  const char *name;
  const char *version;
  const struct pulumi_object_field_t *object;
  uintptr_t object_len;
} pulumi_register_resource_request_t;

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

struct pulumi_engine_t *create_engine(const void *context);

void free_engine(struct pulumi_engine_t *t);

struct pulumi_output_t *create_output(struct pulumi_engine_t *pulumi_engine,
                                      const char *value,
                                      bool secret);

void add_export(const struct pulumi_output_t *value, const char *name);

void finish(struct pulumi_engine_t *pulumi_engine);

struct pulumi_output_t *pulumi_map(struct pulumi_engine_t *pulumi_engine,
                                   const struct pulumi_output_t *output,
                                   const void *function_context,
                                   pulumi_mapping_function_t function);

struct pulumi_output_t *pulumi_get_output(struct pulumi_register_output_t *custom_register_output_id,
                                          const char *field_name);

struct pulumi_register_output_t *pulumi_register_resource(struct pulumi_engine_t *pulumi_engine,
                                                          const struct pulumi_register_resource_request_t *request);

#ifdef __cplusplus
}  // extern "C"
#endif  // __cplusplus

#endif  /* __PULUMI_H__ */

Cleanup

Output and CompositeOutput does not need to be explicitly cleaned up. They are automatically managed by the SDK and will be destroyed when the context is destroyed.