implemented boolean values parsing

This commit is contained in:
Timerix 2025-04-10 16:22:21 +05:00
parent 74d09c51a0
commit c4af1f31e8
3 changed files with 29 additions and 17 deletions

View File

@ -8,6 +8,7 @@ namespace ParadoxSaveParser.Lib;
[JsonSerializable(typeof(string))] [JsonSerializable(typeof(string))]
[JsonSerializable(typeof(long))] [JsonSerializable(typeof(long))]
[JsonSerializable(typeof(double))] [JsonSerializable(typeof(double))]
[JsonSerializable(typeof(bool))]
public partial class ParsedValueJsonContext : JsonSerializerContext public partial class ParsedValueJsonContext : JsonSerializerContext
{ {
} }

View File

@ -154,12 +154,17 @@ public class SaveParserEU4
switch (tok.type) switch (tok.type)
{ {
case TokenType.StringOrNumber: case TokenType.StringOrNumber:
try
{
// string values can be empty // string values can be empty
if(tok.value!.Length == 0) if (tok.value!.Length == 0)
return string.Empty; return string.Empty;
if (tok.value.Equals("yes"))
return true;
if (tok.value.Equals("no"))
return false;
string tokStr = tok.value.ToString(); string tokStr = tok.value.ToString();
_stringBuilderPool.Return(tok.value);
if (tokStr[0] != '-' && !char.IsDigit(tokStr[0])) if (tokStr[0] != '-' && !char.IsDigit(tokStr[0]))
return tokStr; return tokStr;
if (tokStr.Contains('.') && double.TryParse(tokStr, out double d)) if (tokStr.Contains('.') && double.TryParse(tokStr, out double d))
@ -167,6 +172,11 @@ public class SaveParserEU4
if (long.TryParse(tokStr, out long l)) if (long.TryParse(tokStr, out long l))
return l; return l;
return tokStr; return tokStr;
}
finally
{
_stringBuilderPool.Return(tok.value!);
}
case TokenType.BracketOpen: case TokenType.BracketOpen:
object obj = ParseListOrDict(); object obj = ParseListOrDict();
return obj; return obj;

View File

@ -3,11 +3,12 @@ option csharp_namespace = "ParadoxSaveParser.WebAPI.MyProtobuf";
message Item { message Item {
oneof value { oneof value {
int64 i64 = 1; bool b = 1;
double f64 = 2; int64 i64 = 2;
string str = 3; double f64 = 3;
ItemList list = 4; string str = 4;
ItemListMap map = 5; ItemList list = 5;
ItemListMap map = 6;
} }
} }