public Either <RfcErrorInfo, AbapValue> ToAbapValue <T>(T value, RfcFieldInfo fieldInfo) { AbapValue abapValue = null; if (value is AbapValue av) { return(av); } foreach (var converter in _converterResolver.GetToRfcConverters <T>(fieldInfo.Type)) { var result = converter.ConvertFrom(value, fieldInfo)(); if (result.IsFaulted) { continue; } result.IfSucc(v => abapValue = v); break; } if (abapValue == null) { return(new RfcErrorInfo(RfcRc.RFC_CONVERSION_FAILURE, RfcErrorGroup.EXTERNAL_APPLICATION_FAILURE, "", $"Converting from type {typeof(T)} to abap type {fieldInfo.Type} is not supported.", "", "E", "", "", "", "", "")); } return(abapValue); }
public IEnumerable <IToAbapValueConverter <T> > GetToRfcConverters <T>(RfcType rfcType) { var sourceType = typeof(T); var key = $"{rfcType}_{sourceType}"; if (!_toRfcConverters.ContainsKey(key)) { var converters = _decoratedResolver.GetToRfcConverters <T>(rfcType).ToArray(); _toRfcConverters.Add(key, converters.Length == 0 ? null : converters); } var entry = _toRfcConverters[key]; if (entry != null) { return((IEnumerable <IToAbapValueConverter <T> >)entry); } return(new IToAbapValueConverter <T> [0]); }