Example #1
0
        private static string GetListTypeSerialization(FieldDefinition.ListTypeRef listType, string schemaObjectName, string fieldName, string fieldId, TypeDescription parentType, Bundle bundle)
        {
            return($@"for (const {Types.GetTypeDisplayName(listType.InnerType, bundle, parentType)}& Element : {fieldName})
{{
{Text.Indent(1, GetValueTypeSerialization(listType.InnerType, schemaObjectName, "Element", fieldId))}
}}");
        }
Example #2
0
        private static string GetListTypeDeserialization(FieldDefinition.ListTypeRef listType, string schemaObjectName, string targetObjectName, string fieldName, string fieldId, TypeDescription parentType,
                                                         Bundle bundle, bool wrapInBlock = false, bool targetIsOption = false)
        {
            var listInnerTypeName = Types.GetTypeDisplayName(listType.InnerType, bundle, parentType);
            var listName          = $"{Text.SnakeCaseToPascalCase(fieldName)}List";

            var deserializationText = "";

            switch (listType.InnerType.ValueTypeSelector)
            {
            case ValueType.Primitive:
                deserializationText = GetPrimitiveListDeserialization(listType.InnerType.Primitive, schemaObjectName, targetObjectName, fieldName, fieldId, bundle, targetIsOption);
                break;

            case ValueType.Type:
                deserializationText = $@"auto ListLength = Schema_GetObjectCount({schemaObjectName}, {fieldId});
{Types.CollectionTypesToQualifiedTypes[Types.Collection.List]}<{listInnerTypeName}> {listName};
{listName}.SetNum(ListLength);
for (uint32 i = 0; i < ListLength; ++i)
{{
{Text.Indent(1, $"{listName}[i] = {listInnerTypeName}::Deserialize(Schema_IndexObject({schemaObjectName}, {fieldId}, i));")}
}}
{targetObjectName} = {listName};";
                break;

            case ValueType.Enum:
                deserializationText = $@"auto ListLength = Schema_GetEnumCount({schemaObjectName}, {fieldId});
{Types.CollectionTypesToQualifiedTypes[Types.Collection.List]}<{listInnerTypeName}> {listName};
{listName}.SetNum(ListLength);
for (uint32 i = 0; i < ListLength; ++i)
{{
{Text.Indent(1, $"{listName}[i] = static_cast<{listInnerTypeName}>(Schema_IndexEnum({schemaObjectName}, {fieldId}, i));")}
}}
{targetObjectName} = {listName};";
                break;

            default:
                throw new InvalidOperationException("Trying to deserialize invalid TypeReference");
            }

            return(wrapInBlock ? $"{{{Environment.NewLine}{Text.Indent(1, deserializationText)}{Environment.NewLine}}}" : deserializationText);
        }