fromBlockSandwich static method
Implementation
static Danger<ForBlockSandwich, CitrusSemanticException> fromBlockSandwich(BlockSandwich blockSandwich) {
final log = Log(classLocation: ForBlockSandwich, functionLocation: 'fromBlockSandwich');
final blockTypeKeyword = blockSandwich.first.second.second;
if (blockTypeKeyword is! For) return Failure(ForBlockSandwichExceptionA(), log.monitor({
'invalid block type keyword': blockTypeKeyword.runtimeType,
}));
final startBlockArgumentable = blockSandwich.first.fourth;
switch (startBlockArgumentable) {
case ExpressionCollection():
final inSettingResult = InSetting.fromExpressionCollection(startBlockArgumentable);
log.add(inSettingResult);
if (inSettingResult is! Success<InSetting, ImmatureCitrusSemanticException>) return Failure(inSettingResult.asException, log);
final joinSettingResult = JoinSetting.fromExpressionCollection(startBlockArgumentable);
log.add(joinSettingResult);
if (joinSettingResult is! Success<Box<JoinSetting>, AccesserException>) return Failure(joinSettingResult.asException, log);
final withSettingListResult = WithSettingList.fromExpressionCollection(startBlockArgumentable);
log.add(withSettingListResult);
if (withSettingListResult is! Success<CitrusSemanticList<WithSetting>, AccesserException>) return Failure(withSettingListResult.asException, log);
final matureCitrusSemanticListResult = CitrusSemanticList.fromDerivationCitrusSyntax(blockSandwich.second);
log.add(matureCitrusSemanticListResult);
final finishCitrusSemanticListResult = matureCitrusSemanticListResult.wrapped.asFinish();
log.add(finishCitrusSemanticListResult);
if (finishCitrusSemanticListResult is! Success<CitrusSemanticList<FinishCitrusSemantic>, CitrusSemanticException>) return Failure(ForBlockSandwichExceptionJ(), log);
final result = ForBlockSandwich(blockSandwich.source, inSettingResult.wrapped, joinSettingResult.wrapped, withSettingListResult.wrapped, finishCitrusSemanticListResult.wrapped);
return Success(result, log);
case _:
return Failure(ForBlockSandwichExceptionE(), log.monitor({
'invalid start block argumentable': startBlockArgumentable.runtimeType,
'source': startBlockArgumentable.source,
}));
}
}