resolve method
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);
}