nitro-codegen
Version:
The code-generator for react-native-nitro-modules.
60 lines (53 loc) • 1.4 kB
text/typescript
import type { Language } from '../../getPlatformSpecs.js'
import { type SourceFile, type SourceImport } from '../SourceFile.js'
import type { Type, TypeKind } from './Type.js'
export class ArrayType implements Type {
readonly itemType: Type
constructor(itemType: Type) {
this.itemType = itemType
}
get canBePassedByReference(): boolean {
// It's a vector<..>, heavy to copy
return true
}
get kind(): TypeKind {
return 'array'
}
getCode(language: Language): string {
const itemCode = this.itemType.getCode(language)
switch (language) {
case 'c++':
return `std::vector<${itemCode}>`
case 'swift':
return `[${itemCode}]`
case 'kotlin':
switch (this.itemType.kind) {
case 'number':
return 'DoubleArray'
case 'boolean':
return 'BooleanArray'
case 'bigint':
return 'LongArray'
default:
return `Array<${itemCode}>`
}
default:
throw new Error(
`Language ${language} is not yet supported for ArrayType!`
)
}
}
getExtraFiles(): SourceFile[] {
return this.itemType.getExtraFiles()
}
getRequiredImports(): SourceImport[] {
return [
{
language: 'c++',
name: 'vector',
space: 'system',
},
...this.itemType.getRequiredImports(),
]
}
}