fromBlockSandwich static method

Danger<ProtectContent, ImmatureCitrusSemanticException> fromBlockSandwich(
  1. BlockSandwich syntax
)

Implementation

static Danger<ProtectContent, ImmatureCitrusSemanticException> fromBlockSandwich(BlockSandwich syntax) {

    final log = Log(classLocation: ProtectContent, functionLocation: 'fromBlockSandwich');

    final blockTypeKeyword = syntax.first.second.second;

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

    final startBlockArgumentable = syntax.first.fourth;

    if (startBlockArgumentable is! AccesserableCollection) return Failure(ProtectContentExceptionC(), log.monitor({
        'invalid start block argument': startBlockArgumentable.runtimeType,
    }));

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

    final result = ProtectContent(syntax.source, accesserResult.wrapped);

    return Success(result, log);

}