private string MethodBase(TypeSourceArgs source, string nextMethodInvoke) { var node = new CodeNodeBuilder(); node.If($"{(_isInverted ? "!" : "")}({_condition.GetEvalString(source.ToString(), Type, _expression)})", node => { node.Return(nextMethodInvoke); }); node.Return(DeserializeResult.Success.ToDisplayString()); return(node.ToString()); }
public string GetMethodBody(string methodId, IChainMethodArgsProvider provider, IComponentProvider components, IThrowCollection throwCollection) { var node = new CodeNodeBuilder(); node.If($"{IsInvert()}({GetConditionString(provider)})", node => { node.Return(provider.InvokeNextMethod()); }); node.Return(DeserializeResult.Success.ToDisplayString()); return(node.ToString()); string IsInvert() => _isInverted ? "!" : ""; }
/// <returns>Next state arg name</returns> private string LoadNextWriteState <TChainedMethod>(CodeNodeBuilder node, TChainedMethod chainedMethod) where TChainedMethod : MemberChainedMethods <TChainedMethod> { const string nextState = "nextState"; var tstateTypeName = TypeName.FromGenericArgument(SerializeWriterChainedMethods.T_STATE); var state = chainedMethod[tstateTypeName]; var tsource = chainedMethod[TypeName.FromType(_member.ContainingFullType.Symbol)]; node.If($"!{state}.Write({tsource}, out var {nextState})", node => { node.Return(); }); return(nextState); }
public override void TrySerialize(CodeNodeBuilder node, InArgs <object> target, BufferArgs readOnlySpan, OutArgs <int> outWrittenBytes) => node.Return($"{MemberMethod.TrySerializeState(0)} ({parent}, {target}, {readOnlySpan}, out {outWrittenBytes})");
public override void TryDeserializeSpan(CodeNodeBuilder node, BufferArgs readOnlySpan, OutArgs <int> outReadBytes, OutArgs <object> outResult) => node.Return($"{MemberMethod.TryDeserializeState(0)}({parent}, {readOnlySpan}, out {outReadBytes}, out {outResult})");
public override void TryDeserializeSequence(CodeNodeBuilder node, BufferArgs refSequenceCursor, OutArgs <object> outResult) => node.Return($"{MemberMethod.TryDeserializeState(0)}({parent}, ref {refSequenceCursor}, out {outResult})");
public override void Serialize(CodeNodeBuilder node, InArgs <object> target, BufferArgs readOnlySpan) => node.Return($"{MemberMethod.SerializeState(0)}({parent}, {target}, {readOnlySpan})");
public override void GetLength(CodeNodeBuilder node, InArgs <object> target) => node.Return($"{MemberMethod.GetLengthState(0)}({parent}, {target} )");