public Either <RfcErrorInfo, Unit> SetFromDictionary <T>(IDictionary <string, T> dictionary) { return(GetFieldInfos() .Bind(fields => fields.Map(fieldInfo => !dictionary.ContainsKey(fieldInfo.Name) ? Unit.Default : RfcRuntime.SetFieldValue(Handle, dictionary[fieldInfo.Name], () => fieldInfo) ) .Traverse(l => l)) .Map(_ => Unit.Default)); }
public Either <RfcErrorInfo, RfcFieldInfo[]> GetFieldInfos() { return(RfcRuntime.GetTypeDescription(Handle).Use(used => used .Bind(handle => { return RfcRuntime.GetTypeFieldCount(handle).Bind(fieldCount => { return Enumerable.Range(0, fieldCount).Map(i => RfcRuntime.GetTypeFieldDescription(handle, i)).Traverse(l => l); }); })).Map(r => r.ToArray())); }
public Either <RfcErrorInfo, IDictionary <string, AbapValue> > ToDictionary() { return(GetFieldInfos() .Bind(fields => fields.Map(fieldInfo => from fieldValue in RfcRuntime.GetFieldValue <AbapValue>(Handle, () => fieldInfo) from fieldName in Prelude.Right(fieldInfo.Name).Bind <RfcErrorInfo>() select(fieldName, fieldValue) ).Traverse(l => l)) .Map(l => l.ToDictionary( v => v.fieldName, v => v.fieldValue)) .Map(d => (IDictionary <string, AbapValue>)d)); }