fromBlockSandwich static method
Implementation
static Danger<IfBlockSandwich, CitrusSemanticException> fromBlockSandwich(BlockSandwich blockSandwich) {
final log = Log(classLocation: IfBlockSandwich, functionLocation: 'fromBlockSandwich');
final blockTypeKeyword = blockSandwich.first.second.second;
if (blockTypeKeyword is! BooleanKeyword) return Failure(IfBlockSandwichExceptionA(), log.monitor({
'invalid block type keyword': blockTypeKeyword.runtimeType,
}));
final startBlockArgumentable = blockSandwich.first.fourth;
late final Boolean boolean;
switch (startBlockArgumentable) {
case OperatorExpression():
final operator = startBlockArgumentable.third;
final leftResult = Accesser.fromAccesserableCollection(startBlockArgumentable.first);
log.add(leftResult);
if (leftResult is! Success<Accesser, AccesserException>) return Failure(leftResult.asException, log);
final rightResult = Accesser.fromAccesserableCollection(startBlockArgumentable.fifth);
log.add(rightResult);
if (rightResult is! Success<Accesser, AccesserException>) return Failure(rightResult.asException, log);
if (operator is EqualEqual) boolean = EqualityComparison(leftResult.wrapped, rightResult.wrapped);
else return Failure(IfBlockSandwichExceptionD(), log.monitor({
'invalid operator type': operator.runtimeType,
}));
case AccesserableCollection():
final accesserResult = Accesser.fromAccesserableCollection(startBlockArgumentable);
log.add(accesserResult);
if (accesserResult is! Success<Accesser, AccesserException>) return Failure(accesserResult.asException, log);
boolean = Flag(accesserResult.wrapped);
case _:
return Failure(IfBlockSandwichExceptionC(), log.monitor({
'invalid start block argumentable': startBlockArgumentable.runtimeType,
}));
}
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(IfBlockSandwichExceptionE(), log);
final result = IfBlockSandwich(blockSandwich.source, blockTypeKeyword, boolean, finishCitrusSemanticListResult.wrapped);
return Success(result, log);
}