Методы преобразования данных

В некоторых шагах можно самостоятельно определить алгоритм обработки данных. К таким шагам относятся HashJoin, MergeJoin, Map, Rollup. Пользовательский алгоритм преобразования в этих шагах определяется в атрибуте с именем "transform" с помощью внутреннего языка системы PseudoRust:

<Node id="m" type="Map">
    <Attr name="transform">
        <![CDATA[//#PseudoRust:code...]]>
    </Attr>
</Node>

В шагах, использующих функцию преобразования, можно применять методы для работы с записями, описанные в примере ниже:

<Node id="map" guiX="250" guiY="100" guiName="map" type="Map">
    <Attr name="transform"><![CDATA[//#PseudoRust:code
        let index = 0;

        pub fn transform() -> OutPort {
            output.out_0.x_coord = input.y_coord;
            output.out_0.y_coord = input.x_coord;

            match index {

Param(param_name) возвращает значение param_name, но выдает ошибку unknown parameter 'param_name', если имя параметра не определено

                0 => output.out_0.obj_type = param("X"),
                1 => output.out_0.obj_type = param("RbISb"),
                2 => output.out_0.obj_type = format!("secure number is {}", param("FILE_PRM_NUM")),

Param_or(param_name, default_value) возвращает значение параметра или default_value, если параметра нет


                3 => output.out_0.obj_type = input.obj_type + " is not " + &param_or("XX", "goose") + "!",

Try_param(param_name) возвращает Some(value) (value является строкой) в случае, если параметр есть, None, если параметра нет


                4 => output.out_0.obj_type = if let Some(obj_type) = try_param("X") { obj_type } else { "tuturu".to_string() },

Param_parse_or(param_name, default_value) возвращает преобразованное значение параметра, если он есть или default_value. Возвращает ошибку, если значение параметра не преобразуется к типу

                5 | 6 => {
                    output.out_0.y_coord = param_parse_or("X", 24);
                    output.out_0.obj_type = param_parse_or("X", "tururu".to_string());
                }
                 _ => output.out_0.obj_type = input.obj_type,
            }
            index += 1;
            return out_port![ALL]
        }

        pub fn on_error(_: OutPort) { }
        pub fn post_exec() { }
        ]]>
    </Attr>
</Node>