nitro-codegen
Version:
The code-generator for react-native-nitro-modules.
39 lines (38 loc) • 1.18 kB
JavaScript
import {} from '../SourceFile.js';
export class TupleType {
itemTypes;
constructor(itemTypes) {
this.itemTypes = itemTypes;
}
get canBePassedByReference() {
// It's a tuple<..> - heavy to copy
return true;
}
get kind() {
return 'tuple';
}
getCode(language) {
const types = this.itemTypes.map((t) => t.getCode(language));
switch (language) {
case 'c++':
return `std::tuple<${types.join(', ')}>`;
case 'swift':
throw new Error(`Tuple (${types.join(', ')}) is not yet supported in Swift due to a Swift bug! See https://github.com/swiftlang/swift/issues/75865`);
default:
throw new Error(`Language ${language} is not yet supported for TupleType!`);
}
}
getExtraFiles() {
return this.itemTypes.flatMap((t) => t.getExtraFiles());
}
getRequiredImports() {
return [
{
language: 'c++',
name: 'tuple',
space: 'system',
},
...this.itemTypes.flatMap((t) => t.getRequiredImports()),
];
}
}