thenGenerateRequest method
Implementation
Future<CitrusResponse> thenGenerateRequest(GenerateRequest request) async {
final log = Log(classLocation: runtimeType, functionLocation: 'thenGenerateRequest');
// model を準備する
final templateFileResult = await FileModel.fromLocationAndName(request.templateFileLocation, request.templateFileName);
log.add(templateFileResult);
if (templateFileResult is! Success<FileModel, FileSystemException>) return FailureResponse.fromIncidentWithRequest(request, CitrusEnforcerExceptionA(), log);
final decodeResult = templateFileResult.wrapped.decode();
log.add(decodeResult);
if (decodeResult is! Success<String, FormatException>) return FailureResponse.fromIncidentWithRequest(request, CitrusEnforcerExceptionB(), log);
final yamlDocumentResult = BpriverYaml.parseYamlStringAsSingleYamlDocument(decodeResult.wrapped);
log.add(yamlDocumentResult);
if (yamlDocumentResult is! Success<YamlDocument, BpriverYamlExceptionA>) return FailureResponse.fromIncidentWithRequest(request, yamlDocumentResult.asException, log);
final yamlMapResult = BpriverYaml.parseYamlDocumentAsT<YamlMap>(yamlDocumentResult.wrapped);
log.add(yamlMapResult);
if (yamlMapResult is! Success<YamlMap, BpriverYamlExceptionJ>) return FailureResponse.fromIncidentWithRequest(request, yamlMapResult.asException, log);
final templateFileSettingResult = TemplateFileSetting.fromYamlMap(yamlMapResult.wrapped);
log.add(templateFileSettingResult);
if (templateFileSettingResult is! Success<TemplateFileSetting, BpriverYamlException>) return FailureResponse.fromIncidentWithRequest(request, templateFileSettingResult.asException, log);
final templateFileSetting = templateFileSettingResult.wrapped;
final symbolTableStructResult = CitrusSymbolTable.firstStage(request.source, templateFileSetting);
log.add(symbolTableStructResult);
if (symbolTableStructResult is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return FailureResponse.fromIncidentWithRequest(request, symbolTableStructResult.asException, log);
final symbolTableResult = symbolTableStructResult.wrapped.validate();
log.add(symbolTableResult);
if (symbolTableResult is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return FailureResponse.fromIncidentWithRequest(request, symbolTableResult.asException, log);
final symbolTable = symbolTableResult.wrapped;
final objectDefinitionRosterResult = ObjectDefinitionRoster.result([
...templateFileSetting.objectDefinitions,
...templateFileSetting.objectArrayDefinitions,
]);
log.add(objectDefinitionRosterResult);
if (objectDefinitionRosterResult is! Success<ObjectDefinitionRoster, ObjectDefinitionExceptionA>) return FailureResponse.fromIncidentWithRequest(request, objectDefinitionRosterResult.asException, log);
final objectDefinitionRoster = objectDefinitionRosterResult.wrapped;
final compileFrameResult = CitrusLanguage.compileFrame(symbolTable, templateFileSetting);
log.add(compileFrameResult);
if (compileFrameResult is! Success<FileSystemModelList<FileSystemModel>, CitrusLanguageException>) return FailureResponse.fromIncidentWithRequest(request, compileFrameResult.asException, log);
final compileFinishResult = CitrusLanguage.compileFinish(symbolTable, compileFrameResult.wrapped, request.generateLocation, objectDefinitionRoster);
log.add(compileFinishResult);
if (compileFinishResult is! Success<FileSystemModelList<FileSystemModel>, CitrusLanguageException>) return FailureResponse.fromIncidentWithRequest(request, compileFinishResult.asException, log);
// file system entity を作成する
final generateModeResult = GenerateMode.result(request.generateMode);
log.add(generateModeResult);
if (generateModeResult is! Success<GenerateMode, GenerateModeExceptionA>) return FailureResponse.fromIncidentWithRequest(request, generateModeResult.asException, log);
final result = await compileFinishResult.wrapped.create(request.generateLocation, generateModeResult.wrapped);
log.add(result);
if (result is! Success<Complete, FileSystemException>) return FailureResponse.fromIncidentWithRequest(request, CitrusEnforcerExceptionA(), log);
return SuccessResponse.fromRequest(request, [], log);
}