...
This commit is contained in:
@@ -237,12 +237,21 @@ pub fn (t Type) empty_value() string {
|
|||||||
|
|
||||||
// parse_type parses a type string into a Type struct
|
// parse_type parses a type string into a Type struct
|
||||||
pub fn parse_type(type_str string) Type {
|
pub fn parse_type(type_str string) Type {
|
||||||
println('Parsing type string: "${type_str}"')
|
mut type_str_cleaned := type_str.trim_space()
|
||||||
mut type_str_trimmed := type_str.trim_space()
|
|
||||||
|
// Remove inline comments
|
||||||
|
if type_str_cleaned.contains('//') {
|
||||||
|
type_str_cleaned = type_str_cleaned.all_before('//').trim_space()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove default values
|
||||||
|
if type_str_cleaned.contains('=') {
|
||||||
|
type_str_cleaned = type_str_cleaned.all_before('=').trim_space()
|
||||||
|
}
|
||||||
|
|
||||||
// Handle struct definitions by extracting just the struct name
|
// Handle struct definitions by extracting just the struct name
|
||||||
if type_str_trimmed.contains('struct ') {
|
if type_str_cleaned.contains('struct ') {
|
||||||
lines := type_str_trimmed.split_into_lines()
|
lines := type_str_cleaned.split_into_lines()
|
||||||
for line in lines {
|
for line in lines {
|
||||||
if line.contains('struct ') {
|
if line.contains('struct ') {
|
||||||
mut struct_name := ''
|
mut struct_name := ''
|
||||||
@@ -252,76 +261,74 @@ pub fn parse_type(type_str string) Type {
|
|||||||
struct_name = line.all_after('struct ').all_before('{')
|
struct_name = line.all_after('struct ').all_before('{')
|
||||||
}
|
}
|
||||||
struct_name = struct_name.trim_space()
|
struct_name = struct_name.trim_space()
|
||||||
println('Extracted struct name: "${struct_name}"')
|
|
||||||
return Object{struct_name}
|
return Object{struct_name}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for simple types first
|
// Check for simple types first
|
||||||
if type_str_trimmed == 'string' {
|
if type_str_cleaned == 'string' {
|
||||||
return String{}
|
return String{}
|
||||||
} else if type_str_trimmed == 'bool' || type_str_trimmed == 'boolean' {
|
} else if type_str_cleaned == 'bool' || type_str_cleaned == 'boolean' {
|
||||||
return Boolean{}
|
return Boolean{}
|
||||||
} else if type_str_trimmed == 'int' {
|
} else if type_str_cleaned == 'int' {
|
||||||
return Integer{}
|
return Integer{}
|
||||||
} else if type_str_trimmed == 'u8' {
|
} else if type_str_cleaned == 'u8' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 8
|
bytes: 8
|
||||||
signed: false
|
signed: false
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'u16' {
|
} else if type_str_cleaned == 'u16' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 16
|
bytes: 16
|
||||||
signed: false
|
signed: false
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'u32' {
|
} else if type_str_cleaned == 'u32' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 32
|
bytes: 32
|
||||||
signed: false
|
signed: false
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'u64' {
|
} else if type_str_cleaned == 'u64' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 64
|
bytes: 64
|
||||||
signed: false
|
signed: false
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'i8' {
|
} else if type_str_cleaned == 'i8' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 8
|
bytes: 8
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'i16' {
|
} else if type_str_cleaned == 'i16' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 16
|
bytes: 16
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'i32' {
|
} else if type_str_cleaned == 'i32' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 32
|
bytes: 32
|
||||||
}
|
}
|
||||||
} else if type_str_trimmed == 'i64' {
|
} else if type_str_cleaned == 'i64' {
|
||||||
return Integer{
|
return Integer{
|
||||||
bytes: 64
|
bytes: 64
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for array types
|
// Check for array types
|
||||||
if type_str_trimmed.starts_with('[]') {
|
if type_str_cleaned.starts_with('[]') {
|
||||||
elem_type := type_str_trimmed.all_after('[]')
|
elem_type := type_str_cleaned.all_after('[]')
|
||||||
return Array{parse_type(elem_type)}
|
return Array{parse_type(elem_type)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for map types
|
// Check for map types
|
||||||
if type_str_trimmed.starts_with('map[') && type_str_trimmed.contains(']') {
|
if type_str_cleaned.starts_with('map[') && type_str_cleaned.contains(']') {
|
||||||
value_type := type_str_trimmed.all_after(']')
|
value_type := type_str_cleaned.all_after(']')
|
||||||
return Map{parse_type(value_type)}
|
return Map{parse_type(value_type)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for result types
|
// Check for result types
|
||||||
if type_str_trimmed.starts_with('!') {
|
if type_str_cleaned.starts_with('!') {
|
||||||
result_type := type_str_trimmed.all_after('!')
|
result_type := type_str_cleaned.all_after('!')
|
||||||
return Result{parse_type(result_type)}
|
return Result{parse_type(result_type)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no other type matches, treat as an object/struct type
|
// If no other type matches, treat as an object/struct type
|
||||||
println('Treating as object type: "${type_str_trimmed}"')
|
return Object{type_str_cleaned}
|
||||||
return Object{type_str_trimmed}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user