Skip to content

Commit

Permalink
fix: generating structs with correct boolean types
Browse files Browse the repository at this point in the history
  • Loading branch information
dafuga committed Aug 29, 2024
1 parent 6b74e4a commit d33d78b
Show file tree
Hide file tree
Showing 4 changed files with 807 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/commands/contract/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ const decorators = ['?', '[]']
export function extractDecorator(type: string): {type: string; decorator?: string} {
for (const decorator of decorators) {
if (type.includes(decorator)) {
type = type.replace(decorator, '')
type = type.split(decorator).join('')

return {type, decorator}
}
Expand Down
27 changes: 16 additions & 11 deletions src/commands/contract/structs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -335,9 +335,13 @@ function findFieldStructType(
namespace: string | undefined,
abi: ABI.Def
): ts.Identifier | ts.StringLiteral {
const fieldTypeString = extractDecorator(findFieldTypeString(typeString, namespace, abi)).type
let fieldTypeString = extractDecorator(findFieldTypeString(typeString, namespace, abi)).type

if (['string', 'string[]', 'boolean', 'boolean[]'].includes(fieldTypeString.toLowerCase())) {
if (
['string', 'string[]', 'boolean', 'boolean[]', 'bool'].includes(
fieldTypeString.toLowerCase()
)
) {
return ts.factory.createStringLiteral(formatFieldString(fieldTypeString))
}

Expand All @@ -350,28 +354,29 @@ export function findFieldTypeString(
abi: ABI.Def
): string {
const fieldType = findInternalType(typeString, namespace, abi)
const {type: fieldTypeWithoutDecorator, decorator = ''} = extractDecorator(fieldType)

if (['String', 'Number'].includes(fieldType)) {
return fieldType.toLowerCase()
if (['String', 'Number'].includes(fieldTypeWithoutDecorator)) {
return `${fieldTypeWithoutDecorator.toLowerCase()}${decorator}`
}

if (fieldType === 'Bool') {
return 'boolean'
if (fieldTypeWithoutDecorator === 'Bool') {
return `boolean${decorator}`
}

if (fieldType === 'Symbol') {
return 'Asset.Symbol'
if (fieldTypeWithoutDecorator === 'Symbol') {
return `Asset.Symbol${decorator}`
}

if (fieldType === 'Symbol_code') {
return 'Asset.SymbolCode'
if (fieldTypeWithoutDecorator === 'Symbol_code') {
return `Asset.SymbolCode${decorator}`
}

return parseType(fieldType)
}

function formatFieldString(typeString: string): string {
if (typeString === 'boolean') {
if (typeString === 'boolean' || typeString === 'Bool') {
return 'bool'
}

Expand Down
Loading

0 comments on commit d33d78b

Please sign in to comment.