django-vue3-admin-web/node_modules/aws-crt/source/class_binder.h
2025-10-20 21:21:14 +08:00

109 lines
3.4 KiB
C

#ifndef AWS_CRT_NODEJS_CLASS_BINDER_H
#define AWS_CRT_NODEJS_CLASS_BINDER_H
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include "module.h"
/* Increment this as you find functions that require more arguments */
#define AWS_NAPI_METHOD_MAX_ARGS 9
/**
* Expected to be stored statically, but is for internal usage only.
*/
struct aws_napi_class_info {
uint8_t filler[40];
};
/**
* Passed as a parameter to functions accepting arguments.
*/
struct aws_napi_argument {
napi_value node;
napi_valuetype type;
union {
bool boolean;
int64_t number;
struct aws_byte_buf string;
void *external;
} native;
};
/**
* Passed to methods
*/
struct aws_napi_callback_info {
napi_value node_this;
void *native_this;
const struct aws_napi_argument *arguments;
size_t num_args;
};
/***********************************************************************************************************************
* Properties
**********************************************************************************************************************/
typedef napi_value(aws_napi_property_get_fn)(napi_env env, void *native_this);
typedef void(aws_napi_property_set_fn)(napi_env env, void *native_this, const struct aws_napi_argument *value);
struct aws_napi_property_info {
const char *name;
const char *symbol;
napi_valuetype type;
aws_napi_property_get_fn *getter;
aws_napi_property_set_fn *setter;
napi_property_attributes attributes;
};
/***********************************************************************************************************************
* Methods
**********************************************************************************************************************/
typedef napi_value(aws_napi_method_fn)(napi_env env, const struct aws_napi_callback_info *cb_info);
struct aws_napi_method_info {
const char *name;
const char *symbol;
aws_napi_method_fn *method;
size_t num_arguments; /* Number of *REQUIRED* arguments. 0 -> AWS_NAPI_METHOD_MAX_ARGS */
napi_valuetype arg_types[AWS_NAPI_METHOD_MAX_ARGS];
napi_property_attributes attributes;
};
/***********************************************************************************************************************
* API
**********************************************************************************************************************/
bool aws_napi_method_next_argument(
napi_valuetype expected_type,
const struct aws_napi_callback_info *cb_info,
const struct aws_napi_argument **next_arg);
napi_status aws_napi_define_class(
napi_env env,
napi_value exports,
const struct aws_napi_method_info *constructor,
const struct aws_napi_property_info *properties,
size_t num_properties,
const struct aws_napi_method_info *methods,
size_t num_methods,
struct aws_napi_class_info *class_info);
/* The constructor comes from class info will wrap the native object.
* Thus, the finalizer will be invoked with native as
* the finalize_data and class_info as the finalize_hint */
napi_status aws_napi_wrap(
napi_env env,
struct aws_napi_class_info *class_info,
void *native,
napi_finalize finalizer,
napi_value *result);
napi_status aws_napi_define_function(napi_env env, napi_value exports, struct aws_napi_method_info *method);
#endif /* AWS_CRT_NODEJS_CLASS_BINDER_H */