Nix 2.26.3
Nix, the purely functional package manager: C API (experimental)
 
Loading...
Searching...
No Matches
nix_api_value.h
Go to the documentation of this file.
1#ifndef NIX_API_VALUE_H
2#define NIX_API_VALUE_H
3
10
11#include "nix_api_util.h"
12#include "nix_api_store.h"
13#include "stdbool.h"
14#include "stddef.h"
15#include "stdint.h"
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20// cffi start
21
22// Type definitions
23typedef enum {
24 NIX_TYPE_THUNK,
25 NIX_TYPE_INT,
26 NIX_TYPE_FLOAT,
27 NIX_TYPE_BOOL,
28 NIX_TYPE_STRING,
29 NIX_TYPE_PATH,
30 NIX_TYPE_NULL,
31 NIX_TYPE_ATTRS,
32 NIX_TYPE_LIST,
33 NIX_TYPE_FUNCTION,
34 NIX_TYPE_EXTERNAL
35} ValueType;
36
37// forward declarations
38typedef struct nix_value nix_value;
39typedef struct EvalState EvalState;
40
41[[deprecated("use nix_value instead")]] typedef nix_value Value;
42
43// type defs
52
60typedef struct ListBuilder ListBuilder;
61
68typedef struct PrimOp PrimOp;
75
79
95typedef void (*PrimOpFun)(
96 void * user_data, nix_c_context * context, EvalState * state, nix_value ** args, nix_value * ret);
97
114 nix_c_context * context,
115 PrimOpFun fun,
116 int arity,
117 const char * name,
118 const char ** args,
119 const char * doc,
120 void * user_data);
121
137
138// Function prototypes
139
149
160
168
182ValueType nix_get_type(nix_c_context * context, const nix_value * value);
183
190const char * nix_get_typename(nix_c_context * context, const nix_value * value);
191
197bool nix_get_bool(nix_c_context * context, const nix_value * value);
198
211nix_get_string(nix_c_context * context, const nix_value * value, nix_get_string_callback callback, void * user_data);
212
219const char * nix_get_path_string(nix_c_context * context, const nix_value * value);
220
226unsigned int nix_get_list_size(nix_c_context * context, const nix_value * value);
227
233unsigned int nix_get_attrs_size(nix_c_context * context, const nix_value * value);
234
240double nix_get_float(nix_c_context * context, const nix_value * value);
241
247int64_t nix_get_int(nix_c_context * context, const nix_value * value);
248
255
265nix_value * nix_get_list_byidx(nix_c_context * context, const nix_value * value, EvalState * state, unsigned int ix);
266
276nix_value * nix_get_attr_byname(nix_c_context * context, const nix_value * value, EvalState * state, const char * name);
277
285bool nix_has_attr_byname(nix_c_context * context, const nix_value * value, EvalState * state, const char * name);
286
300 nix_c_context * context, const nix_value * value, EvalState * state, unsigned int i, const char ** name);
301
313const char *
314nix_get_attr_name_byidx(nix_c_context * context, const nix_value * value, EvalState * state, unsigned int i);
315
331nix_err nix_init_bool(nix_c_context * context, nix_value * value, bool b);
332
339nix_err nix_init_string(nix_c_context * context, nix_value * value, const char * str);
340
347nix_err nix_init_path_string(nix_c_context * context, EvalState * s, nix_value * value, const char * str);
348
355nix_err nix_init_float(nix_c_context * context, nix_value * value, double d);
356
363
364nix_err nix_init_int(nix_c_context * context, nix_value * value, int64_t i);
371
387
395
402nix_err nix_make_list(nix_c_context * context, ListBuilder * list_builder, nix_value * value);
403
410ListBuilder * nix_make_list_builder(nix_c_context * context, EvalState * state, size_t capacity);
411
420nix_list_builder_insert(nix_c_context * context, ListBuilder * list_builder, unsigned int index, nix_value * value);
421
428
436
451nix_err nix_copy_value(nix_c_context * context, nix_value * value, const nix_value * source);
453
462
471nix_bindings_builder_insert(nix_c_context * context, BindingsBuilder * builder, const char * name, nix_value * value);
472
480
498nix_realised_string * nix_string_realise(nix_c_context * context, EvalState * state, nix_value * value, bool isIFD);
499
505
511
517
523const StorePath * nix_realised_string_get_store_path(nix_realised_string * realised_string, size_t index);
524
529
530// cffi end
531#ifdef __cplusplus
532}
533#endif
534
536#endif // NIX_API_VALUE_H
struct ExternalValue ExternalValue
External Value.
Definition nix_api_value.h:74
void(* nix_get_string_callback)(const char *start, unsigned int n, void *user_data)
Called to get the value of a string owned by Nix.
Definition nix_api_util.h:133
nix_err
Type for error codes in the Nix system.
Definition nix_api_util.h:59
nix_realised_string * nix_string_realise(nix_c_context *context, EvalState *state, nix_value *value, bool isIFD)
Realise a string context.
void nix_realised_string_free(nix_realised_string *realised_string)
Free a realised string.
nix_err nix_value_incref(nix_c_context *context, nix_value *value)
Increment the garbage collector reference counter for the given nix_value.
size_t nix_realised_string_get_store_path_count(nix_realised_string *realised_string)
Number of realised store paths.
nix_value * nix_alloc_value(nix_c_context *context, EvalState *state)
Allocate a Nix value.
struct nix_value nix_value
A Nix language value, or thunk that may evaluate to a value.
Definition nix_api_expr.h:62
const StorePath * nix_realised_string_get_store_path(nix_realised_string *realised_string, size_t index)
Get a store path. The store paths are stored in an arbitrary order.
nix_err nix_value_decref(nix_c_context *context, nix_value *value)
Decrement the garbage collector reference counter for the given object.
const char * nix_realised_string_get_buffer_start(nix_realised_string *realised_string)
Start of the string.
struct nix_realised_string nix_realised_string
String without placeholders, and realised store paths.
Definition nix_api_value.h:78
size_t nix_realised_string_get_buffer_size(nix_realised_string *realised_string)
Length of the string.
struct StorePath StorePath
Nix store path.
Definition nix_api_store.h:25
struct PrimOp PrimOp
PrimOp function.
Definition nix_api_value.h:68
nix_err nix_register_primop(nix_c_context *context, PrimOp *primOp)
add a primop to the builtins attribute set
PrimOp * nix_alloc_primop(nix_c_context *context, PrimOpFun fun, int arity, const char *name, const char **args, const char *doc, void *user_data)
Allocate a PrimOp.
void(* PrimOpFun)(void *user_data, nix_c_context *context, EvalState *state, nix_value **args, nix_value *ret)
Function pointer for primops.
Definition nix_api_value.h:95
nix_err nix_init_string(nix_c_context *context, nix_value *value, const char *str)
Set a string.
struct BindingsBuilder BindingsBuilder
Stores an under-construction set of bindings.
Definition nix_api_value.h:51
void nix_list_builder_free(ListBuilder *list_builder)
Free a list builder.
nix_value * nix_get_attr_byidx(nix_c_context *context, const nix_value *value, EvalState *state, unsigned int i, const char **name)
Get an attribute by index in the sorted bindings.
nix_err nix_list_builder_insert(nix_c_context *context, ListBuilder *list_builder, unsigned int index, nix_value *value)
Insert bindings into a builder.
const char * nix_get_path_string(nix_c_context *context, const nix_value *value)
Get path as string.
ValueType nix_get_type(nix_c_context *context, const nix_value *value)
Get value type.
nix_value * nix_get_list_byidx(nix_c_context *context, const nix_value *value, EvalState *state, unsigned int ix)
Get the ix'th element of a list.
const char * nix_get_attr_name_byidx(nix_c_context *context, const nix_value *value, EvalState *state, unsigned int i)
Get an attribute name by index in the sorted bindings.
struct ListBuilder ListBuilder
Stores an under-construction list.
Definition nix_api_value.h:60
const char * nix_get_typename(nix_c_context *context, const nix_value *value)
Get type name of value as defined in the evaluator.
unsigned int nix_get_list_size(nix_c_context *context, const nix_value *value)
Get the length of a list.
double nix_get_float(nix_c_context *context, const nix_value *value)
Get float value in 64 bits.
nix_err nix_init_int(nix_c_context *context, nix_value *value, int64_t i)
Set an int.
nix_err nix_init_external(nix_c_context *context, nix_value *value, ExternalValue *val)
Set an external value.
ExternalValue * nix_get_external(nix_c_context *context, nix_value *value)
Get external reference.
unsigned int nix_get_attrs_size(nix_c_context *context, const nix_value *value)
Get the element count of an attrset.
nix_err nix_init_null(nix_c_context *context, nix_value *value)
Set null.
nix_value * nix_get_attr_byname(nix_c_context *context, const nix_value *value, EvalState *state, const char *name)
Get an attr by name.
BindingsBuilder * nix_make_bindings_builder(nix_c_context *context, EvalState *state, size_t capacity)
Create a bindings builder.
nix_err nix_make_attrs(nix_c_context *context, nix_value *value, BindingsBuilder *b)
Create an attribute set from a bindings builder.
nix_err nix_copy_value(nix_c_context *context, nix_value *value, const nix_value *source)
Copy from another value.
nix_err nix_make_list(nix_c_context *context, ListBuilder *list_builder, nix_value *value)
Create a list from a list builder.
bool nix_get_bool(nix_c_context *context, const nix_value *value)
Get boolean value.
nix_err nix_init_path_string(nix_c_context *context, EvalState *s, nix_value *value, const char *str)
Set a path.
nix_err nix_get_string(nix_c_context *context, const nix_value *value, nix_get_string_callback callback, void *user_data)
Get the raw string.
nix_err nix_init_float(nix_c_context *context, nix_value *value, double d)
Set a float.
nix_err nix_init_primop(nix_c_context *context, nix_value *value, PrimOp *op)
Set primop.
nix_err nix_init_bool(nix_c_context *context, nix_value *value, bool b)
Set boolean value.
int64_t nix_get_int(nix_c_context *context, const nix_value *value)
Get int value.
nix_err nix_bindings_builder_insert(nix_c_context *context, BindingsBuilder *builder, const char *name, nix_value *value)
Insert bindings into a builder.
bool nix_has_attr_byname(nix_c_context *context, const nix_value *value, EvalState *state, const char *name)
Check if an attribute name exists on a value.
ListBuilder * nix_make_list_builder(nix_c_context *context, EvalState *state, size_t capacity)
Create a list builder.
nix_err nix_init_apply(nix_c_context *context, nix_value *value, nix_value *fn, nix_value *arg)
Set the value to a thunk that will perform a function application when needed.
void nix_bindings_builder_free(BindingsBuilder *builder)
Free a bindings builder.
Main entry for the libstore C bindings.
Main entry for the libutil C bindings.
Represents a state of the Nix language evaluator.
This object stores error state.