-
Notifications
You must be signed in to change notification settings - Fork 5
/
TokenMapper.cs
108 lines (87 loc) · 3.39 KB
/
TokenMapper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Lignator.Interfaces;
using Lignator.Models;
using Microsoft.Extensions.Logging;
namespace Lignator
{
public class TokenMapper : ITokenMapper
{
private readonly ILogger<TokenMapper> logger;
public TokenMapper(ILogger<TokenMapper> logger)
{
this.logger = logger;
}
public async Task<Token> MapToTokenAsync(string rawToken)
{
if(rawToken == "uuid")
{
this.logger.LogTrace("Mapping uuid token");
return new UuidToken();
}
if(rawToken.StartsWith("utcnow"))
{
this.logger.LogTrace("Mapping utcnow token");
int start = rawToken.IndexOf("(") + 1;
int end = rawToken.LastIndexOf(")");
string format = rawToken.Substring(start, end - start);
return !string.IsNullOrWhiteSpace(format) ? new UtcNowToken(format) : new UtcNowToken();
}
if (rawToken.StartsWith("randomitem"))
{
this.logger.LogTrace("Mapping RandomItem token");
int start = rawToken.IndexOf("(") + 1;
int end = rawToken.IndexOf(")");
return new RandomItemToken {
Items = rawToken.Substring(start, end - start).Split(",")
};
}
if (rawToken.StartsWith("randombetween"))
{
this.logger.LogTrace("Mapping RandomBetween token");
int start = rawToken.IndexOf("(") + 1;
int end = rawToken.IndexOf(")");
string[] items = rawToken.Substring(start, end - start).Split(",");
return new RandomBetweenToken
{
Lower = int.Parse(items[0]),
Upper = int.Parse(items[1])
};
}
if (rawToken.StartsWith("linefromfile"))
{
this.logger.LogTrace("Mapping linefromfile token");
int start = rawToken.IndexOf("(") + 1;
int end = rawToken.IndexOf(")");
string filePath = rawToken.Substring(start, end - start);
List<string> lines = new List<string>();
using (StreamReader reader = new StreamReader(filePath))
{
while (!reader.EndOfStream)
{
lines.Add(await reader.ReadLineAsync());
}
}
return new LineFromFileToken()
{
Items = lines.ToArray()
};
}
if(rawToken.StartsWith("variable"))
{
this.logger.LogTrace("Mapping variable token");
int start = rawToken.IndexOf("(") + 1;
int end = rawToken.IndexOf(")");
string name = rawToken.Substring(start, end - start);
return new VariableToken(name);
}
return null;
// Exception exception = new NotImplementedException($"The token {rawToken} has not been implemented");
// this.logger.LogError(exception, "Unable to map token");
// throw exception;
}
}
}