SuperAPI AI 工具集

regocpp-builtins

编程与开发

查看项目

更新于 10-16 00:31

技能介绍

用途:在 rego-cpp 中新增、更新或移除 OPA Rego 内置函数,包括从零实现新 builtin、替换占位符、新增 OPA 命名空间、跟进新 OPA 版本更新声明、移除废弃 builtin,以及排查分发或注册问题。

主要能力:内置函数采用三层架构——BuiltInsDef::lookup(name) 分发层(src/builtins.cc)→ builtins::<namespace>(name) 命名空间路由(src/builtins/<ns>.cc)→ <function>_factory() 工厂(返回含声明与行为的 BuiltIn)→ <function>(args) 实现。关键文件包括 src/builtins/builtins.hh、src/builtins.cc、各命名空间 .cc、src/CMakeLists.txt 与 include/rego/rego.hh。分发使用 src/builtins/binary_tree.py 生成的二叉搜索树,新增命名空间需重新生成或手动更新;io 前缀路由到 builtins::jwt。

使用方式:实现函数接收 const Nodes& args 返回 Node,用 unwrap_arg 配合 UnwrapOpt 解包并校验参数,出错即返回;用 get_string/get_int/get_double/get_bool 或 try_get_* 取值;标量结果返回 JSONString ^、Int ^、Float ^、True/False ^、Undefined 或 err();复合结果必须用 array()、object()、object_item()、boolean()、rego::string()、number()、null() 等辅助函数,禁止手动构造 Array/Term/Scalar 节点。工厂用 bi::Decl 声明参数与返回类型,再经 BuiltInDef::create 注册;占位符改为 BuiltInDef::create,平台依赖用 #ifdef REGOCPP_HAS_CRYPTO 等编译期守卫。新增命名空间需在 builtins.hh 声明、在 builtins.cc 分发树加分支、在 CMakeLists.txt 的 SOURCES 加入 .cc。解析 JSON 应使用 Trieste JSON 解析器(<trieste/json.h>),内部检查用 JSON AST 配合 json::select 与 RFC 6901 路径(如 {"/alg"},前导斜杠必需),返回值用 parse_json_to_term() 转 Rego 项。

测试:OPA 一致性用例位于 build/opa/v1/test/cases/testdata/v1/<testdir>/,可运行 cd build && ./tests/rego_test -wf opa/v1/test/cases/testdata/v1/<testdir>,或 ctest -R rego_test_opa;自定义用例写入 tests/regocpp.yaml 或 tests/bugs.yaml。错误信息须与 OPA 完全一致。

限制:资料未提供具体收费、价格、平台支持范围与效果数据;部分内容依赖 OpenSSL 等平台后端,需编译期开关控制。