diff --git a/.changeset/fix-hashmap-values-conversion.md b/.changeset/fix-hashmap-values-conversion.md new file mode 100644 index 0000000..26fdbb9 --- /dev/null +++ b/.changeset/fix-hashmap-values-conversion.md @@ -0,0 +1,5 @@ +--- +"@codama/renderers-vixen-parser": patch +--- + +- Add HashMap values conversion when needed \ No newline at end of file diff --git a/src/getRenderMapVisitor.ts b/src/getRenderMapVisitor.ts index 804fee8..daa5709 100644 --- a/src/getRenderMapVisitor.ts +++ b/src/getRenderMapVisitor.ts @@ -237,6 +237,19 @@ function getOptionTypeTransform( return returnTransform; } +function getMapValueTransform(valueType: TypeNode): string { + switch (valueType.kind) { + case 'definedTypeLinkNode': + return '.into_proto()'; + case 'publicKeyTypeNode': + return '.to_string()'; + case 'numberTypeNode': + return getNumberTypeTransform(valueType); + default: + return ''; + } +} + function getTransform( type: TypeNode, name: string, @@ -270,6 +283,11 @@ function getTransform( case 'sizePrefixTypeNode': return getArrayTypeTransform(type.type, typeName, idlDefinedTypes); + case 'mapTypeNode': { + const valueTransform = getMapValueTransform(type.value); + return `self.${typeName}.into_iter().map(|(k, v)| (k, v${valueTransform})).collect()`; + } + default: return `self.${typeName}`; }