validateYamlDefinition static method
void
validateYamlDefinition(
- GeneratorConfig config,
- String yaml,
- Uri sourceUri,
- CodeAnalysisCollector collector,
- SerializableModelDefinition? model,
- ParsedModelsCollection parsedModels,
Validates a yaml file against an expected syntax for model files.
Implementation
static void validateYamlDefinition(
GeneratorConfig config,
String yaml,
Uri sourceUri,
CodeAnalysisCollector collector,
SerializableModelDefinition? model,
ParsedModelsCollection parsedModels,
) {
var yamlErrors = ErrorCollector();
YamlMap? document = _loadYamlMap(yaml, sourceUri, yamlErrors);
collector.addErrors(yamlErrors.errors);
if (yamlErrors.errors.isNotEmpty) return;
var documentContents = document;
if (documentContents is! YamlMap) {
var firstLine = yaml.split('\n').first;
collector.addError(
SourceSpanSeverityException(
'The top level object in the class yaml file must be a Map.',
SourceSpan(
SourceLocation(0, sourceUrl: sourceUri),
SourceLocation(firstLine.length, sourceUrl: sourceUri),
firstLine,
)),
);
return;
}
var topErrors = validateTopLevelModelType(
documentContents,
_modelClassTypes,
);
collector.addErrors(topErrors);
var definitionType = _findDefinitionType(documentContents);
if (definitionType == null) return;
var restrictions = Restrictions(
config: config,
documentType: definitionType,
documentContents: documentContents,
documentDefinition: model,
parsedModels: parsedModels,
);
var generateCollisionErrors = validateDuplicateFileName(
documentContents,
restrictions,
);
collector.addErrors(generateCollisionErrors);
Set<ValidateNode> documentStructure;
switch (definitionType) {
case Keyword.classType:
documentStructure = ClassYamlDefinition(restrictions).documentStructure;
break;
case Keyword.exceptionType:
documentStructure = ExceptionYamlDefinition(
restrictions,
).documentStructure;
break;
case Keyword.enumType:
documentStructure = EnumYamlDefinition(restrictions).documentStructure;
break;
default:
throw UnimplementedError(
'Validation for $definitionType is not implemented.');
}
validateYamlModel(
definitionType,
documentStructure,
documentContents,
collector,
);
return;
}