You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.5 KiB
93 lines
2.5 KiB
// ignore_for_file: public_member_api_docs |
|
|
|
class MethodParameter { |
|
MethodParameter({ |
|
required this.type, |
|
required this.nullable, |
|
required this.name, |
|
required final String? defaultValue, |
|
required this.description, |
|
required this.controllerName, |
|
required this.methodName, |
|
}) { |
|
if (defaultValue == 'null') { |
|
nullable = true; |
|
} |
|
if (type == null && defaultValue != null && defaultValue != 'null') { |
|
nullable = false; |
|
if (int.tryParse(defaultValue) != null) { |
|
type = 'int'; |
|
} |
|
if (defaultValue == 'true' || defaultValue == 'false') { |
|
type = 'bool'; |
|
} |
|
if (defaultValue == "''" || defaultValue == '""') { |
|
type = 'string'; |
|
} |
|
if (defaultValue == '[]') { |
|
type = 'array'; |
|
} |
|
} |
|
if (type == null) { |
|
throw Exception( |
|
'Unknown type for parameter "$name" with default value "$defaultValue" of method "$methodName" in controller "$controllerName"', |
|
); |
|
} |
|
if (defaultValue != null && defaultValue != 'null') { |
|
switch (type) { |
|
case 'int': |
|
this.defaultValue = int.tryParse(defaultValue); |
|
break; |
|
case 'bool': |
|
this.defaultValue = defaultValue == 'true'; |
|
break; |
|
case 'string': |
|
this.defaultValue = defaultValue.substring(1, defaultValue.length - 1); |
|
break; |
|
case 'array': |
|
break; |
|
default: |
|
throw Exception('Unknown way to parse default value for type "$type"'); |
|
} |
|
} |
|
} |
|
|
|
String? type; |
|
bool nullable; |
|
final String name; |
|
dynamic defaultValue; |
|
final String? description; |
|
|
|
final String controllerName; |
|
final String methodName; |
|
|
|
String? get openAPIType { |
|
if (type != null) { |
|
if (type == 'string') { |
|
return 'string'; |
|
} |
|
if (type == 'int' || type == 'integer') { |
|
return 'integer'; |
|
} |
|
if (type == 'bool' || type == 'boolean') { |
|
return 'boolean'; |
|
} |
|
if (type == 'array') { |
|
return 'array'; |
|
} |
|
if (type == 'Chain') { |
|
// Unsupported |
|
return null; |
|
} |
|
|
|
throw Exception( |
|
'Could not infer OpenAPI type from type "$type" for parameter "$name" of method "$methodName" in controller "$controllerName"', |
|
); |
|
} |
|
return null; |
|
} |
|
|
|
@override |
|
String toString() => |
|
'MethodParameter(type: $type, nullable: $nullable, name: $name, defaultValue: $defaultValue, description: $description, controllerName: $controllerName, methodName: $methodName)'; |
|
}
|
|
|