protectName function
Protect name from incorrect symbols, keywords, etc.
Implementation
(String? newName, String? description) protectName(
String? name, {
String? description,
bool uniqueIfNull = false,
List<ReplacementRule> replacementRulesForRawSchema = const [],
bool isEnum = false,
bool isMethod = false,
}) {
var replacedName = name;
if (replacedName != null) {
for (final rule in replacementRulesForRawSchema) {
replacedName = rule.apply(replacedName);
}
}
final (newName, error) = switch (replacedName) {
null || '' => uniqueIfNull
? (
uniqueName(isEnum: isEnum),
'Name not received and was auto-generated.',
)
: (null, null),
// https://github.com/Carapacik/swagger_parser/issues/262
_
when replacedName.startsWith(r'$') &&
replacedName
.split('')
.where(
(e) => e == r'$',
)
.length ==
1 =>
(
replacedName.substring(1),
'Incorrect name has been replaced. Original name: `$name`.',
),
_ when !_nameRegExp.hasMatch(replacedName) => (
uniqueName(isEnum: isEnum),
'Incorrect name has been replaced. Original name: `$name`.',
),
_ when dartKeywords.contains(replacedName.toCamel) => (
'$replacedName ${isEnum ? _enumConst : _valueConst}',
'The name has been replaced because it contains a keyword. Original name: `$name`.',
),
_ => (replacedName, null),
};
return (
newName,
switch ((description, error)) {
(null, null) => null,
(null, _) => error,
(_, null) => description,
(_, _) => '$description\n$error',
},
);
}