All files / src/codegen/generators metadataStructGen.ts

100% Statements 15/15
100% Branches 9/9
100% Functions 3/3
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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  1x   1x   17x 17x 32x   29x 29x 2x   29x 16x   29x 5x   29x     17x   17x          
import { ContractSchema } from "../contractSchema";
import { Generator, ind } from "../generator";
 
export class MetadataStructGen implements Generator {
    gen(schema: ContractSchema): string {
        const structDef = `struct ${schema.getMetadataStructName()} {`;
        const structFields = schema.storage.fields
            .filter((field: any) => field.arrayLength !== 0 && field.totalBits !== 0)
            .map((field: any) => {
                let fieldType = field.type;
                if (fieldType == "literef") {
                    fieldType = "uint64";
                }
                if (fieldType == "char8" || fieldType == "char16" || fieldType == "char32" || fieldType == "char64") {
                    fieldType = "string";
                }
                if (field.arrayLength > 1) {
                    fieldType += `[${field.arrayLength}]`;
                }
                return `    ${fieldType} ${field.key};`;
            })
            .join("\n");
        const structEnd = "}";
    
        return ind(4, 
            `${structDef}\n` +
            `${structFields}\n` +
            `${structEnd}\n`);
    }
}