resolve method

  1. @override
Danger<CitrusSymbolTable, DefineException> resolve(
  1. CitrusSymbolTable symbolTable
)
override

Implementation

@override
Danger<CitrusSymbolTable, DefineException> resolve(CitrusSymbolTable symbolTable) {

    final log = Log(classLocation: runtimeType, functionLocation: 'resolve');

    late final Danger<CitrusSymbolTable, CitrusSymbolTableException> result;

    switch (defineKeyword) {
    case DefineFlag():

        final value = bool.tryParse(symbolValue, caseSensitive: true);
        if (value == null) return Failure(DefineExceptionH(), log.monitor({
            'invalid value': symbolValue,
        }));

        result = symbolTable.addFlagSymbol(FlagSymbol.from(symbolName, value));

    case DefineObject():

        final chainResult = Chain.fromSource(symbolValue);
        log.add(chainResult);
        if (chainResult is! Success<Chain, ChainException>) return Failure(DefineExceptionB(), log);

        final citrusObject = CitrusObject.fromChain(chainResult.wrapped.bodyList);

        result = symbolTable.addObjectSymbol(symbolName, citrusObject);

    case DefineObjectArray():

        final chainResult = Chain.fromSource(symbolValue);
        log.add(chainResult);
        if (chainResult is! Success<Chain, ChainException>) return Failure(DefineExceptionB(), log);

        final getResult = chainResult.wrapped.getVarietyEnumeration('array');
        log.add(getResult);
        if (getResult is! Success<VarietyEnumeration, ChainException>) return Failure(DefineExceptionB(), log);

        final citrusObjectArrayResult = CitrusObjectArray.fromChainSourceList(getResult.wrapped.value);
        log.add(citrusObjectArrayResult);
        if (citrusObjectArrayResult is! Success<CitrusObjectArray, ChainException>) return Failure(DefineExceptionB(), log);

        result = symbolTable.addObjectArraySymbol(ObjectArraySymbol(symbolName, citrusObjectArrayResult.wrapped));

    case DefineText():

        result = symbolTable.addTextSymbol(TextSymbol.from(symbolName, symbolValue));

    case DefineTextArray():

        final chainResult = Chain.fromSource(symbolValue);
        log.add(chainResult);
        if (chainResult is! Success<Chain, ChainException>) return Failure(DefineExceptionB(), log);

        final getResult = chainResult.wrapped.getVarietyEnumeration('array');
        log.add(getResult);
        if (getResult is! Success<VarietyEnumeration, ChainException>) return Failure(DefineExceptionB(), log);

        result = symbolTable.addTextArraySymbol(TextArraySymbol.from(symbolName, getResult.wrapped.value));

    }

    log.add(result);
    if (result is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return Failure(DefineExceptionA(), log);

    return Success(result.wrapped, log);

}