diff --git a/src/lib/generateFromRosMsg.ts b/src/lib/generateFromRosMsg.ts index b410cd9..5a2ebb1 100644 --- a/src/lib/generateFromRosMsg.ts +++ b/src/lib/generateFromRosMsg.ts @@ -7,7 +7,7 @@ import { camelCase, compact, partition, snakeCase, upperFirst } from 'lodash'; import { IConfig } from '../types/config'; -import { primitives1, primitives2 } from './primitives'; +import { primitiveArrayTypes, primitives1, primitives2 } from './primitives'; const SUPPORTED_ROS_VERSIONS = [1, 2]; @@ -127,6 +127,27 @@ export const generateFromRosMsg = ( const fullMessageDefinitions = [...messageDefinitions, ...serviceDefinitions]; + const getParamType = (param: MessageDefinitionField, pkgName: string) => { + if (param.type in primitiveArrayTypes && param.isArray) { + return primitiveArrayTypes[ + param.type as keyof typeof primitiveArrayTypes + ]; + } else if (param.type in primitives) { + return primitives[param.type as keyof typeof primitives]; + } else if (useNamespaces) { + if (param.type.split('/')[0] === pkgName) { + return pascalCase(param.type.split('/')[1]); + } else { + return param.type.split('/').map(pascalCase).join('.'); + } + } else { + return rosNameToTypeName( + param.type, + (param as any)['typeAdjusted'] === true ? '' : typePrefix + ); + } + }; + const interfacesByPackage = fullMessageDefinitions .map((definition) => { if (!definition) return '\n'; @@ -235,18 +256,10 @@ ${enumEntriesFromFields(candidates_without_prefix)} const tsTypes = defTypes .filter((defType) => isOfNoneEmptyType(defType)) .map((param) => { - const paramType: string = - param.type in primitives - ? primitives[param.type as keyof typeof primitives] - : useNamespaces - ? param.type.split('/')[0] === pkgName - ? pascalCase(param.type.split('/')[1]) - : param.type.split('/').map(pascalCase).join('.') - : rosNameToTypeName( - param.type, - (param as any)['typeAdjusted'] === true ? '' : typePrefix - ); - const arrayMarker = param.isArray ? '[]' : ''; + const paramType: string = getParamType(param, pkgName); + const arrayMarker = + param.isArray && !paramType.includes('Array') ? '[]' : ''; + return ` ${param.name}: ${paramType.replace( '.', `.${typePrefix}` diff --git a/src/lib/primitives.ts b/src/lib/primitives.ts index abd2cfc..1e8ebe4 100644 --- a/src/lib/primitives.ts +++ b/src/lib/primitives.ts @@ -38,3 +38,16 @@ export const primitives2 = { duration: '{ sec: number, nanosec: number }', time: '{ sec: number, nanosec: number }', }; + +export const primitiveArrayTypes = { + float32: 'Float32Array', + uint8: 'Uint8Array', + uint16: 'Uint16Array', + int8: 'Int8Array', + int16: 'Int16Array', + int32: 'Int32Array', + uint32: 'Uint32Array', + float64: 'Float64Array', + bigint64: 'BigInt64Array', + biguint64: 'BigUint64Array', +};