Skip to main content

runmat_runtime/builtins/strings/transform/
strjoin.rs

1use 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}