fromAloneBlock static method
Implementation
static Danger<IfAloneBlock, CitrusSemanticException> fromAloneBlock(AloneBlock aloneBlock) {
final log = Log(classLocation: IfAloneBlock, functionLocation: 'fromAloneBlock');
final blockTypeKeyword = aloneBlock.second;
if (blockTypeKeyword is! BooleanKeyword) return Failure(IfAloneBlockExceptionC(), log.monitor({
'invalid block type keyword': blockTypeKeyword.runtimeType,
}));
final aloneBlockArgumentable = aloneBlock.fourth;
late final Boolean boolean;
switch (aloneBlockArgumentable) {
case OperatorExpression():
final operator = aloneBlockArgumentable.third;
final leftResult = Accesser.fromAccesserableCollection(aloneBlockArgumentable.first);
log.add(leftResult);
if (leftResult is! Success<Accesser, AccesserException>) return Failure(leftResult.asException, log);
final rightResult = Accesser.fromAccesserableCollection(aloneBlockArgumentable.fifth);
log.add(rightResult);
if (rightResult is! Success<Accesser, AccesserException>) return Failure(rightResult.asException, log);
if (operator is! EqualEqual) return Failure(IfAloneBlockExceptionA(), log.monitor({
'invalid operator type': operator.runtimeType,
}));
boolean = EqualityComparison(leftResult.wrapped, rightResult.wrapped);
case AccesserableCollection():
final accesserResult = Accesser.fromAccesserableCollection(aloneBlockArgumentable);
log.add(accesserResult);
if (accesserResult is! Success<Accesser, AccesserException>) return Failure(accesserResult.asException, log);
boolean = FlagSemantic(accesserResult.wrapped);
case _:
return Failure(IfAloneBlockExceptionB(), log.monitor({
'invalid alone block argumentable': aloneBlockArgumentable.runtimeType,
}));
}
final result = IfAloneBlock(aloneBlock.source, blockTypeKeyword, boolean);
return Success(result, log);
}