fromAloneBlock static method

Danger<ForAloneBlock, CitrusSemanticException> fromAloneBlock(
  1. AloneBlock aloneBlock
)

Implementation

static Danger<ForAloneBlock, CitrusSemanticException> fromAloneBlock(AloneBlock aloneBlock) {

    final log = Log(classLocation: ForAloneBlock, functionLocation: 'fromAloneBlock');

    final blockTypeKeyword = aloneBlock.second;

    if (blockTypeKeyword is! For) return Failure(ForAloneBlockExceptionA(), log.monitor({
        'invalid block type keyword': blockTypeKeyword.runtimeType,
    }));

    final aloneBlockArgumentable = aloneBlock.fourth;

    switch (aloneBlockArgumentable) {
    case InExpression():

        final temporarySymbolAccesserResult = SingleAccesser.fromAccesserableCollection(aloneBlockArgumentable.first);
        log.add(temporarySymbolAccesserResult);
        if (temporarySymbolAccesserResult is! Success<SingleAccesser, AccesserException>) return Failure(temporarySymbolAccesserResult.asException, log);

        final arrayAccesserResult = Accesser.fromAccesserableCollection(aloneBlockArgumentable.fifth);
        log.add(arrayAccesserResult);
        if (arrayAccesserResult is! Success<Accesser, AccesserException>) return Failure(arrayAccesserResult.asException, log);

        // 必ず return
        final result = ForAloneBlock(aloneBlock.source, temporarySymbolAccesserResult.wrapped, arrayAccesserResult.wrapped);

        return Success(result, log);

    case _:

        return Failure(ForAloneBlockExceptionB(), log.monitor({
            'invalid alone block argumentable': aloneBlockArgumentable.runtimeType,
        }));

    }
}