runmat_runtime/builtins/strings/transform/
strjoin.rs1use runmat_builtins::{
2 BuiltinCompletionPolicy, BuiltinDescriptor, BuiltinOutputMode, BuiltinParamArity,
3 BuiltinParamDescriptor, BuiltinParamType, BuiltinSignatureDescriptor,
4};
5use runmat_builtins::{BuiltinIntegerAuditDescriptor, BuiltinIntegerAuditKind};
6use runmat_value::Value;
7
8const STRJOIN_OUTPUT: [BuiltinParamDescriptor; 1] = [BuiltinParamDescriptor {
9 name: "out",
10 ty: BuiltinParamType::Any,
11 arity: BuiltinParamArity::Required,
12 default: None,
13 description: "Joined string array.",
14}];
15
16const STRJOIN_INPUTS: [BuiltinParamDescriptor; 2] = [
17 BuiltinParamDescriptor {
18 name: "text",
19 ty: BuiltinParamType::Any,
20 arity: BuiltinParamArity::Required,
21 default: None,
22 description: "Input text array.",
23 },
24 BuiltinParamDescriptor {
25 name: "delimiter",
26 ty: BuiltinParamType::Any,
27 arity: BuiltinParamArity::Required,
28 default: None,
29 description: "Delimiter inserted between row elements.",
30 },
31];
32
33const STRJOIN_SIGNATURES: [BuiltinSignatureDescriptor; 1] = [BuiltinSignatureDescriptor {
34 label: "out = strjoin(text, delimiter)",
35 inputs: &STRJOIN_INPUTS,
36 outputs: &STRJOIN_OUTPUT,
37}];
38
39pub const STRJOIN_DESCRIPTOR: BuiltinDescriptor = BuiltinDescriptor {
40 signatures: &STRJOIN_SIGNATURES,
41 output_mode: BuiltinOutputMode::Fixed,
42 completion_policy: BuiltinCompletionPolicy::Public,
43 errors: &[],
44};
45
46pub const STRJOIN_INTEGER_AUDIT: BuiltinIntegerAuditDescriptor = BuiltinIntegerAuditDescriptor {
47 kind: BuiltinIntegerAuditKind::NotApplicable,
48 canonical_builtin: None,
49 notes: "strjoin joins text using a text delimiter. Integer, numeric, and provider-resident values have no input role and reject before provider access without implicit text conversion.",
50};
51
52#[runmat_macros::runtime_builtin(
53 name = "strjoin",
54 descriptor(self::STRJOIN_DESCRIPTOR),
55 integer_audit(self::STRJOIN_INTEGER_AUDIT),
56 builtin_path = "crate::builtins::strings::transform::strjoin"
57)]
58pub async fn strjoin_builtin(a: Value, delim: Value) -> crate::BuiltinResult<Value> {
59 crate::strjoin_rowwise(a, delim).await
60}