74 lines
2.4 KiB
Plaintext
74 lines
2.4 KiB
Plaintext
{# 映射器模板 #}
|
|
{% if part == 'header' %}
|
|
#pragma once
|
|
|
|
#include "deserializer.h"
|
|
#include "serializer.h"
|
|
|
|
/**
|
|
* 消息映射器
|
|
* 将{{ source_message.full_name }}映射到{{ target_message.full_name }}
|
|
*/
|
|
class MessageMapper {
|
|
public:
|
|
MessageMapper();
|
|
|
|
// 执行映射
|
|
{{ target_message.system_name }}{{ target_message.message_type }} map(
|
|
const {{ source_message.system_name }}{{ source_message.message_type }}& source);
|
|
|
|
private:
|
|
// 各个字段的映射函数
|
|
{% for edge in mapping_path %}
|
|
void map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(
|
|
const {{ source_message.system_name }}{{ source_message.message_type }}& source,
|
|
{{ target_message.system_name }}{{ target_message.message_type }}& target);
|
|
{% endfor %}
|
|
};
|
|
|
|
{% else %}
|
|
#include "mapper.h"
|
|
#include <cmath>
|
|
#include <algorithm>
|
|
|
|
MessageMapper::MessageMapper() {
|
|
}
|
|
|
|
{{ target_message.system_name }}{{ target_message.message_type }}
|
|
MessageMapper::map(const {{ source_message.system_name }}{{ source_message.message_type }}& source) {
|
|
{{ target_message.system_name }}{{ target_message.message_type }} target;
|
|
|
|
{% for edge in mapping_path %}
|
|
// 映射: {{ edge.mapping.source_field.full_name }} -> {{ edge.mapping.target_field.full_name }}
|
|
map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(source, target);
|
|
{% endfor %}
|
|
|
|
return target;
|
|
}
|
|
|
|
{% for edge in mapping_path %}
|
|
void MessageMapper::map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(
|
|
const {{ source_message.system_name }}{{ source_message.message_type }}& source,
|
|
{{ target_message.system_name }}{{ target_message.message_type }}& target) {
|
|
|
|
{% if edge.mapping.operator.value == 'DIRECT' %}
|
|
// 直接赋值
|
|
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }};
|
|
|
|
{% elif edge.mapping.operator.value == 'ADD' %}
|
|
// 加法运算
|
|
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }} + {{ edge.mapping.operand }};
|
|
|
|
{% elif edge.mapping.operator.value == 'MULTIPLY' %}
|
|
// 乘法运算
|
|
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }} * {{ edge.mapping.operand }};
|
|
|
|
{% else %}
|
|
// 默认直接赋值
|
|
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }};
|
|
{% endif %}
|
|
}
|
|
|
|
{% endfor %}
|
|
{% endif %}
|