Extended data value type descriptions

This commit is contained in:
Michael Schimmel
2025-09-15 12:42:06 +02:00
parent e78ef0a3ea
commit 3ad004a895
3 changed files with 65 additions and 14 deletions
+63 -6
View File
@@ -210,18 +210,75 @@ begin
end;
function TDataValue.ToString: String;
var
sb: TStringBuilder;
field: TScalarRecordField;
first: Boolean;
begin
case FKind of
vkScalar: Result := FScalar.ToString;
vkInterface: Result := '<interface>';
vkText: Result := AsText;
vkSeries: Result := '<series>';
vkRecordSeries: Result := '<record_series>';
vkRecord: Result := '<record>';
vkMemberSeries: Result := '<member_series>';
vkText: Result := '"' + AsText + '"';
vkSeries:
begin
var series := AsSeries.Value;
// Add type and count for series
Result := Format('<series<%s>[%d]>', [series.Kind.ToString, series.Items.Count]);
end;
vkRecordSeries:
begin
var series := AsRecordSeries.Value;
sb := TStringBuilder.Create;
try
sb.Append('{');
first := True;
for field in series.Def.Fields do
begin
if not first then
sb.Append(',');
sb.Append(field.Name);
first := False;
end;
sb.Append('}');
// Add field names and count for record series
Result := Format('<record_series%s[%d]>', [sb.ToString, series.Count]);
finally
sb.Free;
end;
end;
vkRecord:
begin
var rec := AsRecord.Value;
sb := TStringBuilder.Create;
try
sb.Append('{');
first := True;
for field in rec.Def.Fields do
begin
if not first then
sb.Append(',');
sb.Append(field.Name);
first := False;
end;
sb.Append('}');
// Add field names for records
Result := Format('<record%s>', [sb.ToString]);
finally
sb.Free;
end;
end;
vkMemberSeries:
begin
var series := AsMemberSeries.Value;
// Add type and count for member series
Result := Format('<member_series<%s>[%d]>', [series.Kind.ToString, series.Count]);
end;
vkVoid: Result := '<void>';
vkMethod: Result := '<method>';
vkGeneric: Result := '<generic>';
vkGeneric:
// Getting meaningful type information for vkGeneric is not easily possible
// without storing additional RTTI, as the specific type of T in TVal<T> is lost.
Result := '<generic>';
else
Result := '[Unknown DataValue]';
end;