From 84a0ca226a71a3eee3cbb201892dbcca749ef048 Mon Sep 17 00:00:00 2001 From: Francesco Cina Date: Mon, 19 Oct 2020 16:17:00 +0200 Subject: [PATCH] Expose modifiers to tornado REST endpoints --- tornado/engine_api/src/config/convert.rs | 33 ++++++++++++++++++------ tornado/engine_api_dto/src/config.rs | 10 +++++++ tornado/engine_api_dto/ts/dto.ts | 2 +- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/tornado/engine_api/src/config/convert.rs b/tornado/engine_api/src/config/convert.rs index 4f4dddcf..5df0b21d 100644 --- a/tornado/engine_api/src/config/convert.rs +++ b/tornado/engine_api/src/config/convert.rs @@ -1,11 +1,12 @@ use serde_json::Error; use tornado_engine_api_dto::config::{ ActionDto, ConstraintDto, ExtractorDto, ExtractorRegexDto, FilterDto, - MatcherConfigDraftDataDto, MatcherConfigDraftDto, MatcherConfigDto, OperatorDto, RuleDto, + MatcherConfigDraftDataDto, MatcherConfigDraftDto, MatcherConfigDto, ModifierDto, OperatorDto, + RuleDto, }; use tornado_engine_matcher::config::filter::Filter; use tornado_engine_matcher::config::rule::{ - Action, Constraint, Extractor, ExtractorRegex, Operator, Rule, + Action, Constraint, Extractor, ExtractorRegex, Modifier, Operator, Rule, }; use tornado_engine_matcher::config::{MatcherConfig, MatcherConfigDraft, MatcherConfigDraftData}; @@ -131,7 +132,19 @@ fn operator_into_dto(operator: Operator) -> Result { } fn extractor_into_dto(extractor: Extractor) -> ExtractorDto { - ExtractorDto { from: extractor.from, regex: extractor_regex_into_dto(extractor.regex) } + ExtractorDto { + from: extractor.from, + regex: extractor_regex_into_dto(extractor.regex), + modifiers_post: extractor + .modifiers_post + .into_iter() + .map(|modifier| match modifier { + Modifier::Lowercase {} => ModifierDto::Lowercase {}, + Modifier::ReplaceAll { find, replace } => ModifierDto::ReplaceAll { find, replace }, + Modifier::Trim {} => ModifierDto::Trim {}, + }) + .collect(), + } } fn extractor_regex_into_dto(extractor_regex: ExtractorRegex) -> ExtractorRegexDto { @@ -268,14 +281,18 @@ fn dto_into_operator(operator: OperatorDto) -> Result { } fn dto_into_extractor(extractor: ExtractorDto) -> Extractor { - let remove_me = 1; - // ToDo: to be replaced with modifiers from the DTO - // See: https://siwuerthphoenix.atlassian.net/browse/TOR-271 - let modifiers_post = vec![]; Extractor { from: extractor.from, regex: dto_into_extractor_regex(extractor.regex), - modifiers_post, + modifiers_post: extractor + .modifiers_post + .into_iter() + .map(|modifier| match modifier { + ModifierDto::Lowercase {} => Modifier::Lowercase {}, + ModifierDto::ReplaceAll { find, replace } => Modifier::ReplaceAll { find, replace }, + ModifierDto::Trim {} => Modifier::Trim {}, + }) + .collect(), } } diff --git a/tornado/engine_api_dto/src/config.rs b/tornado/engine_api_dto/src/config.rs index efba972d..3bf75402 100644 --- a/tornado/engine_api_dto/src/config.rs +++ b/tornado/engine_api_dto/src/config.rs @@ -27,6 +27,16 @@ pub struct ConstraintDto { pub struct ExtractorDto { pub from: String, pub regex: ExtractorRegexDto, + #[serde(default)] + pub modifiers_post: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +#[serde(tag = "type")] +pub enum ModifierDto { + Lowercase {}, + ReplaceAll { find: String, replace: String }, + Trim {}, } #[derive(Debug, PartialEq, Clone, Serialize, Deserialize, TypeScriptify)] diff --git a/tornado/engine_api_dto/ts/dto.ts b/tornado/engine_api_dto/ts/dto.ts index f4d7d434..972d1ea0 100644 --- a/tornado/engine_api_dto/ts/dto.ts +++ b/tornado/engine_api_dto/ts/dto.ts @@ -43,7 +43,7 @@ export type ActionDto = { id: string; payload: Value }; export type ConstraintDto = { WHERE: OperatorDto | null; WITH: { [key: string]: ExtractorDto } }; -export type ExtractorDto = { from: string; regex: ExtractorRegexDto }; +export type ExtractorDto = { from: string; regex: ExtractorRegexDto; modifiers_post: ModifierDto [] }; export type ExtractorRegexDto = | { type: "Regex"; match: string; group_match_idx: number | null; all_matches: boolean | null }